323

C# では、変数名を「@」文字で開始できることを発見しました。私の C# プロジェクトでは、Java で記述された Web サービス (自分のプロジェクトに Web 参照を追加しました) を使用していました。WSDL で定義されたインターフェイス オブジェクトの 1 つに、「params」という名前のメンバー変数がありました。明らかに、これは C# の予約語であるため、「params」という名前のメンバー変数を持つクラスを持つことはできません。生成されたプロキシ オブジェクトには、次のようなプロパティが含まれていました。

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

VS 2008 c# のドキュメントを検索しましたが、何も見つかりませんでした。また、Google を検索しても、有用な回答は得られませんでした。では、変数/プロパティ名の「@」文字の正確な意味または使用法は何ですか?

4

9 に答える 9

339

C# 言語仕様識別子 (C#)から直接 :

接頭辞「@」を使用すると、キーワードを識別子として使用できます。これは、他のプログラミング言語とやり取りするときに役立ちます。文字 @ は実際には識別子の一部ではないため、識別子は他の言語では接頭辞なしの通常の識別子として表示される場合があります。@ 接頭辞が付いた識別子は逐語的識別子と呼ばれます。

于 2008-09-18T12:24:52.490 に答える
81

予約語を変数名として使用できるようにするだけです。私見はお勧めしません(あなたのような場合を除く)。

于 2008-09-18T11:45:34.207 に答える
38

C# では、アットマーク (@) 文字は、言語仕様の関連規則に明示的に準拠していないリテラルを示すために使用されます。

具体的には、予約済みキーワードと競合する変数名に使用できます (たとえば、params は使用できませんが、代わりに @params を使用できます。言語仕様の out/ref/他のキーワードと同じです)。さらに、エスケープされていない文字列リテラルにも使用できます。これは特にパス定数に関連しています。たとえば、代わりにpath = "c:\\temp\\somefile.txt"と書くことができますpath = @"c:\temp\somefile.txt"。また、正規表現にも非常に役立ちます。

于 2008-09-18T12:01:57.477 に答える
14

Perl のシジルとは異なり@、C# の変数名の前のプレフィックスには意味がありません。xが変数の場合@x、同じ変数の別の名前です。

> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True

しかし、あなたが発見したように、@接頭辞には用途があります.C#がそうでなければ違法として拒否する変数名を明確にするために使用できます。

> string string;
Identifier expected; 'string' is a keyword

> string @string;
于 2013-02-15T10:58:08.263 に答える
12

シンボルを使用すると、@変数名に予約済みのキーワードを使用できます。、などのよう@intに。@string@double

例えば:

string @public = "Reserved Keyword used for me and its fine";

上記のコードは正常に動作しますが、以下のコードは動作しません:

string public = "This will not compile";
于 2014-04-03T12:48:39.027 に答える
5

予約語を変数名として使用できるようにするだけです。event先日呼ばれる変数が欲しかった。代わりに行くつもりでし_eventたが、同僚は代わりにそれを呼び出すことができることを思い出させました@event.

于 2008-09-18T11:46:42.270 に答える
1

識別子の名前としてキーワードを使用すると、コンパイラエラー「識別子が必要です。「識別子名」はキーワードです」が発生します。このエラーを解決するには、識別子の前に「@」を付けます。このような識別子は逐語的な識別子です。文字@は実際には識別子の一部ではないため、他の言語では、接頭辞なしの通常の識別子として識別子が表示される場合があります。

于 2009-02-24T07:06:25.740 に答える