如何在C#中创建可空(?
)类?像:
public class Hello1 {
public int Property1 { get; set; }
}
public class Hello2 {
Public Hello1? Property2 { get; set; } //Hello1 should work when it has "?"
}
如果需要,我想让Hello1
课程能够采用Hello1?
格式。
答案 0 :(得分:48)
您无需为引用类型创建可为空的类型。他们已经可以入罪了。你只需要为int,bool,decimal等值类型执行此操作...
答案 1 :(得分:10)
你不需要;引用类型可以是null
。至于结构,只需附加?
即可。因此,只需删除?
,然后照常使用null
检查== null
。
答案 2 :(得分:3)
只需删除问号。默认情况下,所有类都可以为空。只需要将值类型对象(如struct)明确地设为可为空。
答案 3 :(得分:1)
所有类都可以为空。 nullable适用于不能为null的值类型
答案 4 :(得分:0)
Hello1
已经可以为空了。您不需要在您的财产上使用?
。
编辑 - 我怀疑您可能正在尝试将Hello1.Property1
设置为null,并且您希望将Hello1
置为空可以允许这样做。它不会。如果你这样做,你需要将Property1
标记为可为空。
答案 5 :(得分:0)
Hello1
已经是参考类型,因此它已经是null
可以为空的语法" classname?"只能应用于ValueTypes,例如int
,DateTime
,float
等,通常不能null
。
答案 6 :(得分:0)
请记住,C#或任何编程语言中有两种数据类型,即值类型(例如int,float,bool)和引用类型(所有用户定义的类和字符串数据类型)。
值类型会在创建后立即分配内存位置。所以它们必须保持一个值,而引用类型只有在使用new
关键字明确创建时才能获取内存位置。
因此,只要它们不引用内存位置,默认情况下所有引用类型都可以为空。我们始终可以为其分配null
。
为了使值类型可以为空,我们通过在其旁边添加问号?
来创建现有值类型的包装器。这样,值类型在C#中变为可为空。