匿名类型中的特殊字符
本文关键字:特殊字符 类型 | 更新日期: 2023-09-27 18:32:40
我想创建一个匿名类型,变量名称中带有特殊字符
例如,我有这个:
new { status = "Active" }
我想要类似的东西
new { status = "Active", $exists = true }
这最终会序列化为 JSON,所以我知道我可以使用 JObject 或类似的东西,但作为匿名类型会容易得多。
你必须遵守规则!您的代码无法编译,因为您将其编写为代码中的匿名类型(而不是字符串),因此键必须是语言中的标识符。
语言有规则。标识符必须以有效的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
如果我是你,我会做以下三件事之一:
- 修复您的 API 规范,使其不依赖于在您使用的语言中不是有效标识符的键(痛苦)
- 编写一个简单的转换层,在发送之前重写您的 JSON(混乱)
我想你会很难接受。特殊字符就是这样 - 特殊。它们对编译器具有重要意义,要击败它并不容易(如果不是不可能的话)。
此外,如果您确实设法创建了一个名为 $exists
的变量,您将创建一些令人困惑的代码。$
符号在 C# 和 jQuery 中具有含义,因此任何阅读代码的人都可能想知道发生了什么。
在我看来,这可能比它的价值更麻烦。
你的$exists将无法工作,因为最终编译器将其转换为具有相同名称的属性。在属性值上,不允许使用此命名约定!