DateTime做什么?和使用(var x = new y())是什么意思?

时间:2010-12-14 08:10:31

标签: c#

我不明白以下几行是什么意思,请向我解释。

1

DateTime? pInsertDate;

在此变量声明中,?是什么意思?

2

using (TransactionScope scope = new TransactionScope())

在创建此对象时,using意味着什么?

4 个答案:

答案 0 :(得分:6)

  1. ?后缀是使用Nullable<T>的语法糖。所以你的声明相当于:

    Nullable<DateTime> pInsertDate;
    

    有关详细信息,请参阅nullable value types的MSDN文档。基本上,可以为空的值类型值可以表示非可空基础类型(在这种情况下为DateTime)的任何值以及特殊的“null”值。这个不是一个空引用,但它通常与相同类型的内涵一起使用 - “没有价值”。例如,Person类可能具有DateTime DateOfBirth属性,但具有DateTime? DateOfDeath属性,如果该人仍然活着,则该属性为null。

  2. using语句是一种在正文末尾语句的第一部分中获取的引用上自动调用Dispose的方法。因此,您的代码大致相当于:

    TransactionScope scope = new TransactionScope();
    try
    {
        // Body of the using statement
    }
    finally
    {
        if (scope != null)
        {
            scope.Dispose();
        }
    }
    

    在这种情况下,我们当然知道scope 不会为null,因为我们正在调用构造函数,但这是一般的扩展。 (例如,您可以使用方法调用来获取事务范围 - 在这种情况下,它可能返回null,但生成的代码不会抛出NullReferenceException。)

答案 1 :(得分:1)

这是Nullable Types

的语法

答案 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