4

変数の名前に特殊文字を使用して匿名型を作成したい

たとえば、私はこれを持っています:

new { status = "Active" }

何か欲しいのですが

new { status = "Active", $exists = true }

これは最終的にJSONにシリアル化されるため、JObjectなどを使用できることはわかっていますが、匿名タイプの方がはるかに簡単です。

4

3 に答える 3

2

あなたはルールに固執する必要があります!これを(文字列としてではなく)匿名型のコードとして記述しているため、コードはコンパイルされません。そのため、キーは言語の識別子である必要があります。

言語にはルールがあります。identifier-start-character識別子は、定義された有効なもので始まる必要があります。

クラスLu、Ll、Lt、Lm、Lo、またはNlのUnicode文字

このルールに従って:

http://www.jaggersoft.com/csharp_grammar.html#identifier-start-character

このテーブルを使用すると、3番目の列は、「$」が「Sc」クラスにあるため、使用できないことを示しています。

http://www.unicode.org/Public/UNIDATA/UnicodeData.txt

もし私があなただったら、私は次の3つのことのいずれかを行います。

  1. 使用している言語で有効な識別子ではないキーに依存しないようにAPI仕様を修正してください(苦痛)
  2. 送信される前にJSONを再書き込みする単純な翻訳レイヤーを作成する(乱雑)
于 2012-04-30T16:33:54.243 に答える
0

苦労すると思います。特殊文字はまさにそれです-特別です。それらはコンパイラにとって重要な意味を持っており、それを打ち負かすことは(不可能ではないにしても)簡単ではありません。

さらに、という名前の変数を作成できた場合は$exists、紛らわしいコードを作成することになります。シンボルはC#とjQueryで意味を持っている$ので、コードを読む人は誰でも何が起こっているのか不思議に思うかもしれません。

私の意見では、それはおそらくそれが価値があるよりも厄介です。

于 2012-04-30T16:32:47.677 に答える
0

最終的にコンパイラによって同じ名前のプロパティに変換されるため、$existsは機能しません。また、プロパティ値では、この命名規則は許可されていません。

于 2012-04-30T16:34:37.680 に答える