C#中的可空值类型是Int32吗?真的是一个Int32 - ?

时间:2013-07-30 13:55:03

标签: c# types nullable

所以,如果我想传递一个可以为空的值类型,如Int32?在方法中,我必须告诉方法参数它是可以为空的。

public void foo(Int32? arg){...}

如果我将常规Int32传递给arg就可以了。但如果我把它改成

public void foo(Int32 arg){...}

并传入一个可以冒犯它的怪物。

所以我的问题是吗?改变Int32的类型?

有Int32吗?对象还是做的?只需在Int32中设置一个标志并使其可以为空?

基本上我是在问我们幕后发生了什么。

3 个答案:

答案 0 :(得分:2)

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.

答案 1 :(得分:2)

Nullable结构实现了int类型到int?的隐式转换,而另一种方式是显式的,因此在第一种情况下,转换是隐式的,第二种是必须进行显式转换。这是Nulable struct的代码的构造:

    public static implicit operator T?(T value)
{
   return new T?(value);
}
public static explicit operator T(T? value)
{
   return value.Value;
}

答案 2 :(得分:0)

Int32?Nullable<Int32>同义,或仅与Nullable<int>int?

同义

int?是一个值类型,它可以具有值null,这就是为什么你不能将它传递给类型为int的函数参数的原因 - 如果它会发生什么?它的值是null