如何在C#中使结构为空?

时间:2012-02-06 07:09:07

标签: c#

如何在C#中使结构为空?

EMPLOYEE? objEmployee = null;  
EMPLOYEE stEmployee = objEmployee.GetValueOrDefault();

但这会使stEmployee字段为null,但我想将此结构设为null。 它显示stEmployee.FirstName = nullstEmployee.LastName = null

但我想让stEmployee为空。 怎么实现呢?

4 个答案:

答案 0 :(得分:2)

你做不到。结构是C#中的值对象。如果您要求它们可以为空,则需要使用语法EMPLOYEE?

答案 1 :(得分:1)

Struct是值类型 - 不是引用类型。无法将所有值类型分配为null。

"Value Types" article on MSDN

答案 2 :(得分:1)

struct不能为null,就像int不能为null,float不能为null - 它们都是值类型!但就像你在C#中制作nullable类型一样,你可以面对struct

当你想拥有一个能够接受空值的整数类型时,你应该遵循以下代码:

int? x = null;

然后您可以按照以下方式检查它,并且您还可以通过x.Value访问其值

if ( x != null)
{
    //then do blah-blah with x.Value
    Console.Write(x.Value * 2);
}

现在你可以用struct ...

做同样的事情
struct Book
{
   public string title;
   ...
}
...
Book book0 = null; //It doesn't work
Book? book1 = null; //It works

答案 3 :(得分:0)

您需要使用可从.NET2获得的Nullable<T>类型。

原因是因为引用类型值可以设置为零,这表示引用类型不指向任何内容,然后是NULL。使用值类型,您不能简单地说它的值全为零,例如,Int32的全零值仅表示0值。

主要区别在于您直接指定的值类型,对于参考类型,您只需为该值指定“内存指针”。 Nullable只能与值类型一起使用,并且它使用额外的位来存储信息,无论类型是否为null(HasValue)。