【问题标题】:Nullable Value Types in C# is Int32? REAALLY an Int32 -?C# 中的可空值类型是 Int32?真的是一个 Int32 -?
【发布时间】:2013-07-30 17:15:32
【问题描述】:

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

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

如果我将常规 Int32 传递到 arg 中,它可以工作。但是如果我把它改成

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

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

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

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

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

【问题讨论】:

标签: c# types nullable


【解决方案1】:

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.

【讨论】:

【解决方案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;
}

【讨论】:

    【解决方案3】:

    Int32?Nullable&lt;Int32&gt; 的同义词,或者只是普通的 Nullable&lt;int&gt; 甚至是 int?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 2020-03-16
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 2013-11-30
      相关资源
      最近更新 更多