C#班?在财产(这是什么意思?)

时间:2011-07-14 00:24:29

标签: c# nullable

我正在研究我的MCPD,这个示例类在ADO.net实体框架示例中显示。我还没遇到过?在OrderDate和EmployeeID等财产中,有人可以向我解释它的作用或含义吗?

public class Order
{
 public int OrderID { get; set; }

 public string CustomerID { get; set; }
 public int? EmployeeID { get; set; }
 public DateTime? OrderDate { get; set; }
 public DateTime? RequiredDate { get; set; }
 public DateTime? ShippedDate { get; set; }
 public int? ShipVia { get; set; }
 public decimal? Freight { get; set; }
 public string ShipName { get; set; }
 public string ShipAddress { get; set; }
 public string ShipCity { get; set; }
 public string ShipRegion { get; set; }
 public string ShipPostalCode { get; set; }
 public string ShipCountry { get; set; }
 public Customer Customer { get; set; }
}

6 个答案:

答案 0 :(得分:7)

它是Nullable<T>类型的缩写,其中T?之前的类型。因此

public int? EmployeeID { get; set; }

相当于

public Nullable<int> EmployeeID { get; set; }

实际上,可以为空的类型允许您将null分配给值类型。这些类型非常特殊,因为相应的非可空类型上的各种运算符和方法被“提升”为可空类型。

请注意,T必须是不可为空的值类型。此外,Nullable<T>是一种参考类型,这是一种常见的误解。它是一个值类型,虽然是一个非常特殊的类型(它从编译器获得帮助是如此特殊)。例如,非常特殊地处理装箱和拆箱操作(基础值被装箱,除非它是null,在这种情况下,object的盒装实例是null引用; if {{ 1}}被取消装箱到可以为空的类型的实例,它被取消装箱到nullHasValue)的值。

答案 1 :(得分:4)

这意味着它可以为空。可以为空的值可以包含值,也可以为null,如下所示:

int? myVar = 4;

myVar = null //myVar is now null. This would be illegal is myVar wasn't nullable

myVar = 17 // myVar now contains 17

答案 2 :(得分:3)

这意味着变量可以为空。

答案 3 :(得分:1)

[值类型]?是Nullable类的简写。

它将接受空赋值(值类型不能)。 当您准备好访问该值时,可以检查myNullable == nullmyNullable.HasValue,实际的valueType(int,DateTime,等等)将在myNullable.Value中。

答案 4 :(得分:0)

它只是使值可以为空。这意味着您可以为属性分配“null”。没有“?”你无法做到。

答案 5 :(得分:0)

可空,当您使用数据库时,可以将列设置为int null 所以在c#int中不是null,因为int是值类型。所以在c#中支持int?