我问的原因是,它只在方法参数声明中有效,不是吗?我试图在函数体中创建一个名为“params”的变量,但当然这不是什么大问题,只是想知道MS选择使其成为全局关键字而不是上下文的原因。
答案 0 :(得分:9)
可以询问任何其他关键字。例如,为什么不是“类”上下文,因为它只用于类声明?
对我来说,关键字是关键字。我想它大大简化了编译的词法分析部分,而不必是那种情境感知。
另外,您可以使用@
符号来声明一个名为'params'的变量(或任何其他保留关键字):
var @params = new int[] { 1, 2 };
答案 1 :(得分:5)
答案 2 :(得分:4)
Eric Lippert有一篇博文,内容涵盖contextual and reserved keywords及其历史。虽然它没有明确解释为什么params在保留列表中(从1.0开始),但它意味着它属于 hard 以保留上下文的保留字集。
答案 3 :(得分:2)
params关键字看起来只对方法参数声明有用,但我实际上同意MS,不管怎样,让关键字用于实例名称不是一个好主意。
也许他们在C#8.0中保留了这样的能力:
params Customers = DB.GetCustomerList();
或者在本地范围内允许params
。