C#中字典的文字表示法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我目前在JavaScript和服务器之间有一个WebSocket,它是用C#编程的。在JavaScript中,我可以使用关联数组轻松地传递数据:

var data = {'test': 'val',
            'test2': 'val2'};

要在服务器端表示此数据对象,我使用Dictionary<string, string>,但这比使用JavaScript更“输入-昂贵”:

Dictionary<string, string> data = new Dictionary<string,string>();
data.Add("test", "val");
data.Add("test2", "val2");

是否有关联数组/的某种文字表示法?Dictionary在C#?

提问于
用户回答回答于

仍然需要创建一个new Dictionary<string, string>对象,因为快捷语法被转换为Add()调用:

var data = new Dictionary<string, string>
{
    { "test", "val" }, 
    { "test2", "val2" }
};

在C#6中,现在可以选择使用更直观的字典语法以及任何其他支持的类型索引器。上述声明可改写为:

var data = new Dictionary<string, string>
{
    ["test"] = "val",
    ["test2"] = "val2"
};

与集合初始化器不同,这将调用遮罩下的索引器setter,而不是适当的Add()方法。

用户回答回答于

如果目标是提供简洁的API使用,则可以使用匿名对象。

var data = new { test1 = "val", test2 = "val2"};

然后,“data”变量是“不可言说的”匿名类型,因此只能将其作为System.Object。然后,可以编写代码,将匿名对象转换为字典。这样的代码将依赖于反射,这可能是缓慢的。但是,你可以用System.Reflection.Emit,或System.Linq.Expressions要编译和缓存一个委托,将使后续调用速度快得多。

ASP.NETMVCAPI在我见过的许多地方都使用了这种技术。许多HTML助手都有重载,可以接受对象或字典。我假设他们的API设计目标与你所追求的目标相同;方法调用时的语法简洁。

扫码关注云+社区