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),但在此用法中并不理解它的用途。
答案 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,这似乎不太可能......