Hey,

Pedro Sobota wrote:
> You are right. In this case, I don't get why csc lets the use of 'as' 
> with a nullable value type, if a conventional value type is not 
> supported. Should gmcs act like csc, or be coherent?

Please file a bug.

> Unrelated but there is also this curious case where:
> 
> static T CheckDBNull<T>(object value) {
>     if (value is DBNull) return (T)null; else return (T)value;
> }
> 
> is not allowed, but
> 
> static T CheckDBNull<T>(object value) {
>     return (T)((value is DBNull) ? null : value);
> }
> 
> is, on both compilers!

It's not curious at all:

 From the C# spec, (§20.1.1)

"The literal null cannot be converted to a type given by a type 
parameter, except if the type parameter is known to be a reference type 
(§‎20.7.4). However, a default value expression (§‎20.8.1) can be used 
instead. In addition, a value with a type given by a type parameter can 
be compared with null using == and != (§‎20.8.4) unless the type 
parameter has the value type constraint (§‎20.7.4)."


You might argue that the latter test case could fall
under this rule, but it doesn't because the ternary
expression (like every other complex expression)
hides the literal null.

Robert

_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to