首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给KeyValuePair赋值

给KeyValuePair赋值
EN

Stack Overflow用户
提问于 2019-10-01 11:39:03
回答 3查看 3.9K关注 0票数 1

我想给我的KeyValuePair对象分配一些静态值。

代码语言:javascript
复制
private IEnumerable<KeyValuePair<string, string>> getCountries()
{
    return new List<KeyValuePair<string, string>>() 
    { 
      { "code1", "value1" }, 
      { "code2", "value2" } 
    };
}

但这是抛出新重载的方法错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-01 11:42:48

代码语言:javascript
复制
return new List<KeyValuePair<string, string>>()
{
    new KeyValuePair<string, string>("code1", "value1"),
    new KeyValuePair<string, string>("code2", "value2"),
};

如果您使用的是.NET Core 2.0+,则可以使用稍微少一些的2.0+:

代码语言:javascript
复制
return new List<KeyValuePair<string, string>>()
{
    KeyValuePair.Create("code1", "value1"),
    KeyValuePair.Create("code2", "value2"),
};

在C# 9中,您可以使用目标类型的new将其写入如下:

代码语言:javascript
复制
return new List<KeyValuePair<string, string>>()
{
    new("code1", "value1"),
    new("code2", "value2"),
};
票数 8
EN

Stack Overflow用户

发布于 2019-10-01 11:55:43

也可以使用Dictionary实现所需的初始化样式。

代码语言:javascript
复制
var pairs = new Dictionary<string, string>
{
    { "one", "first" },
    { "two", "second" },
}.ToList();

pairs.Should().BeOfType<List<KeyValuePair<string, string>>>(); // Pass

注意,如果在后面的代码中只枚举键值对列表,则可以使用字典,而不必显式地将其转换为列表。

代码语言:javascript
复制
var pairs = new Dictionary<string, string>
{
    { "one", "first" },
    { "two", "second" },
}

// later somewhere in the code

foreach(var pair in pairs)
{
    Console.WriteLine($"{pair.Key}: {pair.Value}")
}

如果在内部(类内)使用值,则可以使用元组。

代码语言:javascript
复制
private IEnumerable<(string Code, string Name)> GetCountries()
{
    yield return ("code", "Earth");
    yield return ("code", "Vulkan");
}

以后可以以更易读的方式使用。

代码语言:javascript
复制
foreach(var country in GetCountries())
{
    Console.WriteLine($"{country.Code}: {country.Name}")
}

如果跨应用程序使用类型,那么您可以向代码的读者展示代码的意图并创建自定义类型,而不是使用键值对。

代码语言:javascript
复制
public class Country
{
    public string Code { get; }
    public string Name { get; }

    public Country(string code, string name)
    {
        Code = code;
        Name = name;
    }
}

private IEnumerable<Country> GetCountries()
{
    yield return new Country("code", "Earth");
    yield return new Country("code", "Vulkan");
}

以后可以以更易读的方式使用。

代码语言:javascript
复制
foreach(var country in GetCountries())
{
    Console.WriteLine($"{country.Code}: {country.Name}")
}
票数 1
EN

Stack Overflow用户

发布于 2019-10-01 11:55:19

您需要考虑泛型类的键属性和值属性都是只读属性,因此不能直接设置它们。相反,您需要利用类的构造函数来设置所需的对。

代码语言:javascript
复制
 public IEnumerable<KeyValuePair<string, string>> getCountries()
  {
        var keyValue1 = new KeyValuePair<string,string>("code1","value1");
        var keyvalue2 = new KeyValuePair<string,string>("code2","value2");

        var keyValueList = new List<KeyValuePair<string, string>> {keyValue1, keyvalue2};
        return keyValueList;

   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58184056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档