2

是否可以将 ValueTuple 声明为 Dictionary 中的值,在 ValueTuple 中包含项目的名称?

我试过了:

var x = new Dictionary<String, ValueTuple<name: String, id: String> = {...}

但我真的没想到它会起作用,但后来也没有:

var x = new Dictionary<String, ValueTuple<String, String>> = {
  { "mary", (name: "foo", id: "green") }}

请注意,前面的声明在没有提及名称和 id 的情况下有效,但是我不能按名称访问元组成员..

var x = new Dictionary<String, ValueTuple<String, String>> = {
  { "mary", ("foo", "green") }}

var y = x["mary"].foo   // won't work
4

2 回答 2

3

您可以通过以下方式使用命名元组:

var dict = new Dictionary<string, (string name, string id)>();
dict.Add("Mary", ("Foo", "green"));
...
var id = dict["Mary"].id; //get an Id value

此语法从C# 7开始可用。

如果您更喜欢集合初始值设定项,则可以声明一个字典,如

var dict = new Dictionary<string, (string name, string id)>
{
    { "Mary", ("Foo", "green") }
};

此声明var y = x["mary"].foo不起作用,因为foo它是元组项的值,而不是名称。要获得foo您应该使用的值dict["Mary"].name

于 2020-03-02T20:15:49.600 回答
1

是和不是。

名称仅在代码中,不在数据中。

你可以这样做:

var dict = new Dictionary<string, (string, string)>();
dict.Add("Mary", (name: "Foo", id: "green"));
(string foo, string bar) t1 = dict["Mary"];
var v1 = t1.foo; // Foo
var v2 = t1.bar; // green

虽然元组以nameid值名称添加到字典中,但它是使用foobar值名称检索的。

于 2020-03-02T23:37:09.960 回答