Browse by Tags

Tagged Content List
  • Blog Post: An "is" operator puzzle, part two

    As I said last time , that was a pretty easy puzzle: either FooBar, or the type of local variable x, can be a type parameter. That is: void M<FooBar>() { int x = 0; bool b = x is FooBar; // legal, true if FooBar is int. FooBar fb = (FooBar)x; // illegal } or struct FooBar { /* ... */ } void M<X>...
  • Blog Post: When is a cast not a cast?

    I'm asked a lot of questions about conversion logic in C#, which is not that surprising. Conversions are common, and the rules are pretty complicated. Here's some code I was asked about recently; I've stripped it down to its essence for clarity: class C<T> {} class D { public static C<U>...
  • Blog Post: Cast operators do not obey the distributive law

    Another interesting question from StackOverflow . Consider the following unfortunate situation: object result; bool isDecimal = GetAmount(out result); decimal amount = (decimal)(isDecimal ? result : 0); The developer who wrote this code was quite surprised to discover that it compiles and then...
  • Blog Post: What's the difference between "as" and "cast" operators?

    Most people will tell you that the difference between " (Alpha) bravo " and " bravo as Alpha " is that the former throws an exception if the conversion fails, whereas the latter returns null. Though this is correct, and this is the most obvious difference, it's not the only difference. There are pitfalls...
  • Blog Post: Representation and Identity

    (Note: not to be confused with Inheritance and Representation .) I get a fair number of questions about the C# cast operator. The most frequent question I get is: short sss = 123; object ooo = sss; // Box the short. int iii = (int) sss; // Perfectly legal. int jjj = (int) (short) ooo; // Perfectly...
Page 1 of 1 (5 items)