为什么params关键字不是上下文?

时间:2011-01-05 21:40:51

标签: c# .net compiler-construction

我问的原因是,它只在方法参数声明中有效,不是吗?我试图在函数体中创建一个名为“params”的变量,但当然这不是什么大问题,只是想知道MS选择使其成为全局关键字而不是上下文的原因。

4 个答案:

答案 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