我只是发现自己心不在焉地from
用作标识符。
我意识到可以使用@
转义标识符名称并因此使用保留字,但我不明白为什么在这种情况下我没有收到警告或错误。
除了预期目的之外,我不想使用保留字,但我不想再犯类似的错误,并且想知道在某些情况下使用不保留的语言关键字背后的基本原理。
我只是发现自己心不在焉地from
用作标识符。
我意识到可以使用@
转义标识符名称并因此使用保留字,但我不明白为什么在这种情况下我没有收到警告或错误。
除了预期目的之外,我不想使用保留字,但我不想再犯类似的错误,并且想知道在某些情况下使用不保留的语言关键字背后的基本原理。
某些关键字仅在某些上下文中保留,例如partial
in partial class
。
请参阅MSDN 上此主题下的“上下文关键字” 。
C# 团队专门尝试避免在该语言中创建新的保留关键字。添加的任何新关键字都意味着它会自动破坏使用该关键字作为标识符的现有代码。因此,只要有可能,C# 将使用上下文关键字来最小化或消除破坏现有代码的可能性。
上下文关键字是仅在特定上下文中使用时的关键字,例如from
, partial
,var
等......该上下文不包括标识符:)
我不相信自 C# 2.0 以来添加了一个新关键字(甚至不确定 2.0 添加了一个)
from是一个“上下文关键字”。很多 C# 中的,它们仅在特定上下文中使用时才表现得像关键字。最大的优势是在语言中添加这样的上下文关键字不会破坏现有代码。
您会在此MSDN 页面的第二个表中找到它们。是的,从那里。
当它们是上下文时,它们不会被保留(MSDN 链接):
上下文关键字用于在代码中提供特定含义,但它不是 C# 中的保留字。一些上下文关键字,例如 partial 和 where,在两个或多个上下文中具有特殊含义。
要回答基本问题:
在 C# 1 之后添加的所有关键字都是上下文相关的。这避免了破坏性更改。
几乎所有 C# 1 关键字都是保留的,除了访问器关键字(add
、remove
、get
和set
)。
大多数 C# 关键字始终是保留的。正如您所发现的,有些仅在某些情况下保留。它们被称为上下文关键字。我相信这是一种更好地确保向后兼容性的方法。
原因是from
在 C# 2 中这是一个完全可以接受的变量名。C# 3 添加了 LINQ,他们需要关键字。为了保持最大的兼容性,from
被添加为上下文关键字。