如何根据定义使'struct'为Nullable?

时间:2010-12-20 16:54:01

标签: c# struct nullable

struct AccountInfo
{
   String Username;
   String Password;
}

现在,如果我想要一个Nullable实例,我应该写一下:

Nullable<AccountInfo> myAccount = null;

但我希望自然地制作struct Nullable并且可以像这样使用(不使用Nullable<T>):

AccountInfo myAccount = null;

3 个答案:

答案 0 :(得分:50)

你做不到。 Struct被视为值类型,根据定义,不能为null。使其成为nullable的最简单方法是使其成为引用类型。

你需要问自己的答案是“为什么这是一个结构?”除非你能想出一个非常可靠的理由,否则不要把它变成一个阶级。关于结构“更快”的论点,实际上是夸张的,因为结构不一定是在堆栈上创建的(你不应该依赖于它),并且“获得”的速度因具体情况而异。

请参阅Eric Lippert关于课程与结构辩论和速度的post

答案 1 :(得分:40)

当你声明它时,用“?”声明它如果你愿意的话

AccountInfo? myAccount = null;

答案 2 :(得分:15)

简短的回答:让它成为一个班级。

答案很长:这个结构是可变的,结构不应该是,不代表结构总是应该的单个值,并且没有合理的“零”值结构也总是应该,所以它可能不应该是值类型。使它成为一个类(引用类型)意味着它总是可以为null。


注意:使用“never”和“always”等词语时,应使用隐含的“几乎”。