7

まず、それはC#で変数名の前の@記号が何を意味するのかという重複ではあり ませんか?

group保存されたキーワードではありません。

私はいくつかのコードを書きました、そして、resharperは私に@変数の前に加えることを提案しましたgroup

なぜですか?

var group = GetDefaultGroup(ClientServiceCommon.Poco.Group);

filteredPairs = @group.Pairs.ToList();
4

1 に答える 1

12

あなたが正しく指摘しているように、groupは予約済みキーワードではありません (言語設計者は、既存のプログラムを壊さないようにするために言語に新しい機能を追加するときに、新しい予約済みキーワードを導入しないように懸命に努力しています)。ただし、これはコンテキストキーワードであり、LINQ クエリ式内のキーワードになります。Resharper は、問題の変数の名前を変更して、この変数がクエリ式内で使用された場合に生じる曖昧さを回避することを提案しています。

言語仕様から:

7.16.1 クエリ式のあいまいさ

クエリ式には、多数の「コンテキスト キーワード」、つまり特定のコンテキストで特別な意味を持つ識別子が含まれます。具体的には、from、where、join、on、equals、into、let、orderby、ascending、descending、select、group 、by です。これらの識別子をキーワードまたは単純な名前として混合して使用することによるクエリ式のあいまいさを回避するために、これらの識別子は、クエリ式内の任意の場所で発生するとキーワードと見なされます。この目的のため、クエリ式は、「識別子から」で始まり、その後に「;」、「=」、または「,」以外の任意のトークンが続く任意の式です。

以下を実行しようとすると、コンパイラ エラーが発生します。

var filteredParis = from pair in group.Pairs // group is now treated as a keyword
                    select pair;
于 2013-02-12T14:32:17.757 に答える