C# Bug or Brain Teaser? Cast working only with Coalesce (??) Operator

Posted by Alex on Stack Overflow See other posts from Stack Overflow or by Alex
Published on 2010-05-27T00:19:17Z Indexed on 2010/05/27 0:31 UTC
Read the original article Hit count: 198

Filed under:
|
|
|
|

This is very strange, maybe someone can explain what's happening, or this is a bug (though I tend to think that this is probably just something intricate about C#).

The following code throws the error "Cannot implicitly convert type 'uint?' to 'uint'.":

public void Test(UInt32? p)
{ 
    UInt32 x = p;
}

However, this code works without error:

public void Test(UInt32? p)
{
    UInt32 x = p ?? 1;
}

Huh? Why does this work? Why would the coalesce operator cause implicit conversion of UInt32? (nullable) to UInt32 (non-nullable), while the first error message says that there is no implicit conversion between those types?

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET