C#中可为null的值类型是Int32?REALLY国际32-
本文关键字:Int32 REALLY 国际 类型 null | 更新日期: 2023-09-27 18:25:41
如果我想传递一个可以为null的值类型,比如Int32?到一个方法中,我必须告诉方法param它是一个可以为null的。
public void foo(Int32? arg){...}
如果我将一个常规的Int32传递到arg中,它就会起作用。但如果我把它改成
public void foo(Int32 arg){...}
然后传中一个可以为零的球,这太可怕了。
所以我的问题是?更改Int32的类型?
有Int32吗?对象还是?只是在Int32中设置一个标志并使其可以为null?
基本上,我在问引擎盖下发生了什么。
Int32?
是Nullable<Int32>
的缩写,因此这是两种不同的类型。Int32
可以隐式地广播给Nullable<Int32>
,但不能反过来。
在http://msdn.microsoft.com/de-de/library/b3h38hb0(v=vs.100).aspx您可以看到两个运算符:
Explicit(Nullable<T> to T): Returns the value of a specified Nullable<T> value.
Implicit(T to Nullable<T>): Creates a new Nullable<T> object initialized to a specified value.
Nullable结构实现类型int到int的隐式转换?,而另一种方式是显式的,所以在第一种情况下转换是隐式的,第二种情况下必须进行显式转换。这是Nuablestruct:中代码的一个突出部分
public static implicit operator T?(T value)
{
return new T?(value);
}
public static explicit operator T(T? value)
{
return value.Value;
}
Int32?
与Nullable<Int32>
同义,或仅与普通Nullable<int>
同义,甚至与int?
同义
int?
是一个值类型,它可以具有值null
,这就是为什么不能将它传递给类型为int
的函数参数——如果它的值是null
会发生什么?