我正在研究我的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; }
}
答案 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}}被取消装箱到可以为空的类型的实例,它被取消装箱到null
为HasValue
)的值。
答案 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 == null
或myNullable.HasValue
,实际的valueType(int,DateTime,等等)将在myNullable.Value
中。
答案 4 :(得分:0)
它只是使值可以为空。这意味着您可以为属性分配“null”。没有“?”你无法做到。
答案 5 :(得分:0)
可空,当您使用数据库时,可以将列设置为int null 所以在c#int中不是null,因为int是值类型。所以在c#中支持int?