Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匿名类型中的特殊字符_C#_Asp.net_Asp.net Mvc 3 - Fatal编程技术网

C# 匿名类型中的特殊字符

C# 匿名类型中的特殊字符,c#,asp.net,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc 3,我想创建一个匿名类型,在变量名中使用一个特殊字符 例如,我有: new { status = "Active" } 我想要类似的东西 new { status = "Active", $exists = true } 这最终会序列化为JSON,所以我知道我可以使用JObject或类似的东西,但作为匿名类型要容易得多。我想你会很难做到这一点。特别的角色就是这样——特别。它们对编译器具有重要意义,要克服这一点并不容易(如果不是不可能的话) 此外,如果您确实创建了一个名为$exists的变量,那么

我想创建一个匿名类型,在变量名中使用一个特殊字符

例如,我有:

new { status = "Active" }
我想要类似的东西

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

这最终会序列化为JSON,所以我知道我可以使用JObject或类似的东西,但作为匿名类型要容易得多。

我想你会很难做到这一点。特别的角色就是这样——特别。它们对编译器具有重要意义,要克服这一点并不容易(如果不是不可能的话)

此外,如果您确实创建了一个名为
$exists
的变量,那么您将创建一些令人困惑的代码。
$
符号在C#和jQuery中有意义,因此任何阅读您的代码的人都可能想知道到底发生了什么


在我看来,这可能比它的价值更麻烦

你必须遵守规则!您的代码将无法编译,因为您是以匿名类型(而不是字符串)在代码中编写的,因此键必须是语言中的标识符

语言有规则。标识符必须以有效的
标识符开始字符开始,定义如下:

Lu、Ll、Lt、Lm、Lo或Nl类的Unicode字符

根据这条规则:

使用此表,第三列告诉我们“$”在“Sc”类中,因此不能使用它

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

  • 修复API规范,使其不依赖于在您使用的语言中不是有效标识符的键(痛苦)
  • 编写一个简单的转换层,在JSON被发送之前重新编写它(凌乱)

  • $exists将无法工作,因为编译器最终会将其转换为同名的属性。在属性值上不允许使用此命名约定

    您是正确的,但是这只是针对JSON的序列化。谢谢您的详细回答。我显然知道编译器的局限性,我希望有一个解决办法。因为它稍后只是JSON序列化的,所以我将创建一个JObject对象。祝你好运!哈哈,我想知道第三点是什么。我会把它放在那里,让答案更神秘。