Is there any difference between type? and Nullable<type>?

馋奶兔 提交于 2019-12-18 03:01:15

问题


In C# are the nullable primitive types (i.e. bool?) just aliases for their corresponding Nullable<T> type or is there a difference between the two?


回答1:


If you look at the IL using Ildasm, you'll find that they both compile down to Nullable<bool>.




回答2:


There is no difference between bool? b = null and Nullable<bool> b = null. The ? is just C# compiler syntax sugar.




回答3:


To access the value of the bool? you need to do the following:

bool? myValue = true;
bool hasValue = false;

if (myValue.HasValue && myValue.Value)
{
  hasValue = true;
}

Note you can't just do:

if (myValue)
{
  hasValue = true;
}



回答4:


I'm surprised nobody went to the source (the C# spec) yet. From §4.1.10 Nullable types:

A nullable type is written T?, where T is the underlying type. This syntax is shorthand for System.Nullable<T>, and the two forms can be used interchangeably.

So, no, there isn't any difference between the two forms. (Assuming you don't have any other type called Nullable<T> in any of the namespaces you use.)




回答5:


A Nullable<T> is a structure consisting of a T and a bit flag indicating whether or not the T is valid. A Nullable<bool> has three possible values: true, false and null.

Edit: Ah, I missed the fact that the question mark after "bool" was actually part of the type name and not an indicator that you were asking a question :). The answer to your question, then, is "yes, the C# bool? is just an alias for Nullable<bool>".




回答6:


A bool is a value type, therefore it can't contain a NULL value. If you wrap any value type with Nullable<>, it will give it that ability. Moreover, access methods to the value change by additional properties HasValue and Value.

But to the question: Nullable<bool> and bool? are aliases.




回答7:


No there is no difference. In summary:

System.Boolean -> valid values : true, false

bool -> alias for System.Boolean

Nullable<bool> -> valid values : true, false, null

bool? -> alias for Nullable<bool>

Hope this helps.




回答8:


Null primitives are just regular primitives wrapped in Nullable. Any appearances to the contrary are just the compiler and syntactical sugar.




回答9:


No difference. Take a look here: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

"The syntax T? is shorthand for Nullable, where T is a value type. The two forms are interchangeable."



来源:https://stackoverflow.com/questions/56518/is-there-any-difference-between-type-and-nullabletype

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!