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

使用这个表,第三列告诉我们'$'在'Sc'类中,所以你不能使用它。

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

如果我是你,我会做以下三件事之一:

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