类变量的默认值

时间:2015-04-11 21:52:22

标签: c# class

今天我在这个网站上看到了答案。 MVC ViewModel - Object Reference Not Set to Instance of an Object

我对实例化类的默认值感到困惑。当我们使用" new"创建新课程时关键字,其字段值自动设置为默认值。

例如,整数变为0,字符串变为空。

列表怎么样?

List<int>

为什么我们没有新的List实例属于instanced对象?

2 个答案:

答案 0 :(得分:8)

  

为什么我们没有新的List实例属于instanced对象?

As per the C# specification, ECMA-334, section 12.2:

  

以下类别的变量会自动初始化为默认值:
   - 静态变量
   - 类实例的实例变量
   - 数组元素

     

变量的默认值取决于变量的类型,并确定如下:
   - 对于value-type的变量,默认值与value-type的默认构造函数计算的值相同。
   - 对于reference-type的变量,默认值为null。

请参阅上面的粗体摘录 - 由于List<int>是参考类型,因此它会初始化为null

答案 1 :(得分:4)

其中T为任何类型的List<T>是引用类型。因此,它的默认值为null。

例如,让我们有以下类声明:

public class Customer
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName  { get; set; }
    public List<Order> Orders { get; set; }
}

其中Order是一个类。

如果您实例化类型为customer的对象,如下所示:

var customer = new Customer();

然后

customer.Id // is 0
customer.FirstName // is null
customer.LastName // is null
customer.Orders // is null

请注意,FirstNameLastName都是字符串,其默认值为null。字符串是引用类型。