4

我有一个类(由 filehelpers 使用),当我尝试定义一个可为空的字符串时,它给了我一个错误:

public String? ItemNum;

错误是:

 Error  1   The type 'string' must be a non-nullable value type in order 
 to use it as parameter 'T' in the generic type or method 'System.Nullable<T>'

即使使用小写字母也会发生这种情况string,尽管我还没有看到它们之间的区别。

使用其他类型,如 int、decimal 等很好:

public decimal? ItemNum;

网上的一些一般看法谈到按字段等定义构造函数,但鉴于其他字段工作正常,字符串有什么特别之处?有没有优雅的方法来避免它?

4

1 回答 1

14

string是引用类型,引用类型本质上可以为空。

当您定义public string ItemNum时,它已经可以为空。

Nullable添加了 struct 以允许使值类型也可以为空。

当你声明public decimal? ItemNum时,它相当于public Nullable<decimal> ItemNum.

Nullable结构有定义:

public struct Nullable<T> where T : struct, new()

where T : struct意味着T只能是值类型。

MSDN 中的描述是非常详细的Nullable Structure

引用:

例如,String 等引用类型可以为空,而 Int32 等值类型则不能。值类型不能为空,因为它有足够的能力只表达适合该类型的值;它没有表达 null 值所需的额外容量。

于 2011-06-16T03:35:18.203 回答