c# – 为什么默认值不适用于双括号?

为什么这个编译:

return default(T);

但这不是:

return default((T));

完整的方法是

public static T PenultimateOrDefault<T>(this IEnumerable<T> items)
{
    if (items.Count() >= 2)
        return items.ElementAt(items.Count() - 2);
    else
        return default(T);
}

默认((T))的错误是

; expected
Invalid expression term ')'
Type expected

所以看起来解析器被双括号所困扰.

最佳答案
那么,这不是指定语言的方式.

重要的是要理解默认类似于typeof – 它们是运算符1,而不是方法调用.它不是类型的名称是一个参数 – 它是一个操作数,操作数应该只是类型名称.

C#5规范的第7.6.13节显示了默认值表达式的构造:

default-value-expression:
default ( type )

其中type只是类型或类型参数的名称.在使用泛型参数或声明变量时,您不能再将括号括在此处:

(string) x = ""; // Invalid
var x = new List<(string)>(); // Invalid

1它从未在规范中指定为“默认运算符”;总是“默认值表达式” – 但它确实是所有有意义的运算符,并且它与优先级表中的其他运算符一起列出.

转载注明原文:c# – 为什么默认值不适用于双括号? - 代码日志