1

那么如果我想传递一个可以为空的值类型,比如 Int32 呢?进入一个方法,我必须告诉方法参数它是可空的。

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

如果我将常规 Int32 传递给 arg 它可以工作。但是,如果我将其更改为

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

并传入一个可为空的,它吓坏了。

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

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

基本上我在问引擎盖下发生了什么。

4

3 回答 3

2

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

    public static implicit operator T?(T value)
{
   return new T?(value);
}
public static explicit operator T(T? value)
{
   return value.Value;
}
于 2013-07-30T14:02:33.620 回答
2

Int32?是 的缩写Nullable<Int32>,所以这是两种不同的类型。An Int32can 隐式转换为 a 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.
于 2013-07-30T13:59:03.877 回答
0

Int32?是同义词Nullable<Int32>或只是简单Nullable<int>甚至int?

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

于 2013-07-30T14:00:51.533 回答