gpt4 book ai didi

c# - 为什么 default 不适用于双括号?

转载 作者:行者123 更新时间:2023-11-30 13:14:55 24 4
gpt4 key购买 nike

为什么编译:

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-value-expression:
default ( type )

其中 type 只是类型或类型参数的名称。您不能再像在使用通用参数或声明变量时那样在此处用括号括起来:

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

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

关于c# - 为什么 default 不适用于双括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21622626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com