非泛型中“default”关键字的用途和用法

时间:2012-01-25 23:53:24

标签: c#

A recent question here在我感兴趣的非通用代码中使用了default关键字:

StreamReader r = default(StreamReader);

这里的目的是什么?这有什么不同:

StreamReader r;

两个语句都定义r。在下面的“SLaks”答案中,他澄清了default的使用另外将r设置为null,但这可以通过使用null明确地完成。这是一个样式问题,还是有一些实用程序服务?

我使用了default in generic code(当然还有in switch statement blocks),但在此用法中并不理解它的用途。

3 个答案:

答案 0 :(得分:4)

表达式default(T)生成类型泛型的默认值。对于引用类型,它将是null,对于值类型,它将是0初始化。虽然它在通用代码中最有用,但在常规代码中仍然可用(如果经常有点冗长)。

例如。以下几组线都是等效的

StreamReader r = null;
StreamReader r = default(StreamReader);
var r = default(StreamReader);

int i = 0;
int i = default(int);
var i = default(int);

答案 1 :(得分:3)

它与StreamReader r;的不同之处在于它分配变量。 它(完全)与StreamReader r = null;相同。

对于参考类型,default(T)会编译为null 对于值类型,default(T)会编译为new T()

C#的default(T)关键字is actually equivalent to VB.Net's Nothing keyword

答案 2 :(得分:0)

var r = default(StreamReader); 可能会有所帮助,特别是如果你试图养成编码习惯。 除此之外,我能看到的唯一优势是,如果将来某个时候StreamReader的默认值可能不再为null,这似乎不太可能......