使用以下语句有什么好处?

时间:2012-08-14 20:27:32

标签: c# default

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

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

我只想写一下像

这样的陈述
StringBuilder sb = new StringBuilder();

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

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

修改 做这样的事情,你能看到优势或劣势吗? (它确实编译)

var sb = default(StringBuilder);

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

4 个答案:

答案 0 :(得分: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)  
{
    //...

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

如果情况并非如此,那么最好将它们放在一起。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

只有在开发使用参数化类型的泛型类时,才会出现使用default的优点。有时,不知道类型是引用类型还是值类型或结构。 default关键字为引用类型返回null,为数值类型返回0

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

答案 3 :(得分:2)

默认关键字通常与泛型类型的初始化一起使用,其中无法确定我们是处理值类型(初始化为例如零)还是引用类型(初始化为null)。根据其他答案,在您提供的示例中,无论是初始化StringBuilder还是立即重新分配它,也没有使用default关键字。

在.net 3.5中,您可能会遇到一个额外的约定,即:

var sb = new StringBuilder();

这里sb的类型是从赋值的RHS推断出来的。