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

Xaq*_*ron 48 c# struct nullable

struct AccountInfo
{
   String Username;
   String Password;
}
Run Code Online (Sandbox Code Playgroud)

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

Nullable<AccountInfo> myAccount = null;
Run Code Online (Sandbox Code Playgroud)

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

AccountInfo myAccount = null;
Run Code Online (Sandbox Code Playgroud)

kem*_*002 53

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

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

通过埃里克利珀的类与结构的争论和速度.


Dlo*_*ker 44

声明它时,用"?"声明它 如果你更喜欢

AccountInfo? myAccount = null;
Run Code Online (Sandbox Code Playgroud)

  • 这不是"定义"它.那是在宣告它. (7认同)

Gre*_*ech 17

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

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


注意:使用"never"和"always"等词语时,应使用隐含的"几乎".