C#中可为null的值类型是Int32?REALLY国际32-



如果我想传递一个可以为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会发生什么?

最新更新