我不明白以下几行是什么意思,请向我解释。
1
DateTime? pInsertDate;
在此变量声明中,?
是什么意思?
2
using (TransactionScope scope = new TransactionScope())
在创建此对象时,using
意味着什么?
答案 0 :(得分:6)
?
后缀是使用Nullable<T>
的语法糖。所以你的声明相当于:
Nullable<DateTime> pInsertDate;
有关详细信息,请参阅nullable value types的MSDN文档。基本上,可以为空的值类型值可以表示非可空基础类型(在这种情况下为DateTime
)的任何值以及特殊的“null”值。这个不是一个空引用,但它通常与相同类型的内涵一起使用 - “没有价值”。例如,Person类可能具有DateTime DateOfBirth
属性,但具有DateTime? DateOfDeath
属性,如果该人仍然活着,则该属性为null。
using
语句是一种在正文末尾语句的第一部分中获取的引用上自动调用Dispose
的方法。因此,您的代码大致相当于:
TransactionScope scope = new TransactionScope();
try
{
// Body of the using statement
}
finally
{
if (scope != null)
{
scope.Dispose();
}
}
在这种情况下,我们当然知道scope
不会为null,因为我们正在调用构造函数,但这是一般的扩展。 (例如,您可以使用方法调用来获取事务范围 - 在这种情况下,它可能返回null,但生成的代码不会抛出NullReferenceException
。)
答案 1 :(得分:1)
答案 2 :(得分:0)
SomeType?
是Nullable<SomeType>
的语法糖。它只能应用于值类型(不是引用类型),并指示该变量还能够存储与引用类型null
相等的值。 (值类型不能为null,因此添加了Nullable<T>
类型以允许这种情况。它在数据库绑定代码中非常有用,其中可以为空的列通用。)
using (SomeType x = y) { ... }
是语法糖:
SomeType x = y;
try {
...
} finally {
if (x != null)
((IDisposable)x).Dispose();
}
这种模式在使用类实现IDisposable的对象时很常见,作为一种在它们即将失效时自动清理这些对象的方法。
答案 3 :(得分:0)
使用查看文章,它帮助我理解了这个陈述。 http://www.codeproject.com/KB/cs/tinguusingstatement.aspx