为什么编译:
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);
}
的错误default((T))
是
; expected
Invalid expression term ')'
Type expected
因此,看起来解析器被双括号弄混了。
好吧,这不是指定语言的方式。
重要的是要知道这default
就像typeof
-它们是运算符1,而不是方法调用。这不像类型的名称是一个参数-它是一个操作数,并且该操作数应该只是类型名。
C#5规范的7.6.13节显示了默认值表达式的构造:
默认值表达式:
default (
类型)
其中type
只是类型或类型参数的名称。使用泛型参数或声明变量时,不再可以在此处用括号括起来:
(string) x = ""; // Invalid
var x = new List<(string)>(); // Invalid
1在规范中从未将其指定为“默认运算符”;始终是“默认值表达式”-但实际上,它在所有有意义的意义上都是一个运算符,并且在优先级表中与其他运算符一起列出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句