';默认';非泛型中的关键字
本文关键字:关键字 默认 泛型 | 更新日期: 2023-09-27 18:21:21
最近的一个问题在我感兴趣的非泛型代码中使用了default
关键字:
StreamReader r = default(StreamReader);
这里的目的是什么?这与有何不同
StreamReader r;
这两个语句都定义了r
。在下面的"SLaks"回答中,他澄清了default
的使用额外地将r
设置为null
,但这可以通过仅使用null
来明确实现。这是一个风格问题,还是有一些实用性?
我在泛型代码中使用过default
(当然,在switch
语句块中也使用过),但不理解它在这种用法中的用途。
表达式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);
它与StreamReader r;
的不同之处在于它分配变量。它(完全)与StreamReader r = null;
相同。
对于引用类型,default(T)
编译为null
对于值类型,default(T)
编译为new T()
。
C#的default(T)
关键字实际上相当于VB.Net的Nothing
关键字。
var r=默认值(StreamReader);可能会有一些意义,尤其是当你试图养成编码习惯的时候。除此之外,我能看到的唯一优势是,如果在未来的某个时候,StreamReader的默认值可能不再为null,这似乎不太可能。。。。。