3

最近,我遇到了以下几行:

StringBuilder sb = default(StringBuilder);
sb = new StringBuilder();

我会简单地写下这样的陈述

StringBuilder sb = new StringBuilder();

使用 default(StringBuilder) 语句有什么好处?

基于所有很好的反馈,我提出了一个新问题。

编辑: 你能看到做这样的事情的优点或缺点吗?(它确实编译)

var sb = default(StringBuilder);

再次提到,我相信我们正在研究是否存在范围问题,但最大的问题可能是对象未正确初始化。你觉得呢?你有没有什么想法?

4

4 回答 4

4

一般来说,什么都没有。没有理由初始化变量,然后在下一行代码中设置它。你的第二个陈述更干净。

拆分声明和赋值的理由很少。这通常仅在涉及范围问题时才需要,例如尝试围绕分配使用异常处理:

StringBuilder sb = null;

try
{
    // Using a statement that may throw
    sb = GetAStringBuilder();
}
catch
{
    //...
}

// The compiler will warn about a potentially 
// uninitalized variable here without the default assignment
if (sb != null)  
{
    //...

在这种情况下,您需要将两者分开,因为您在本地范围内进行分配 (the try)。

如果不是这种情况,那么最好将它们放在一起。

于 2012-08-14T20:32:06.487 回答
3

没有任何优势;第二个片段更简洁,更具可读性。

于 2012-08-14T20:32:19.967 回答
2

The default keyword is often used with the initialization of generic types, where one cannot be certain whether we are dealing with a value type (initialized e.g. to zero) or a reference type (initialized to null). As per other answers, in the example you provided, there is little purpose either initializing StringBuilder and reassigning it immediately, nor using the default keyword.

In .net 3.5 there is one additional convention which you may come across, viz:

var sb = new StringBuilder();

Here the type of sb is inferred from the RHS of the assignment.

于 2012-08-14T20:42:36.970 回答
2

default只有当您开发一个使用参数化类型的泛型类时,使用的优势才会出现。有时,不知道该类型是引用类型、值类型还是结构。default关键字返回null引用类型和数值0类型。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/xwth0h0d%28v=vs.80%29.aspx

于 2012-08-14T20:38:37.297 回答