';默认';非泛型中的关键字

本文关键字:关键字 默认 泛型 | 更新日期: 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,这似乎不太可能。。。。。