如何无需重复代码初始化含键对应值的C# Dictionary?
如何在C#中无需重复代码初始化包含键对应值的Dictionary?
你想要的是初始化Dictionary时,让每个键值对的值自动包含对应的键,不用手动重复输入键的内容——比如避免像示例里那样,手动把"someKey"再写进值数组里。下面给你几种可行的实现方式:
修正并优化你的自定义方法
你自己尝试的GetPair思路没问题,只是有几处小错误需要调整,比如参数名写错、缺少数组转换步骤,优化后的代码如下:
Dictionary<string, string[]> _dict = new(GetPairs()); KeyValuePair<string, string[]>[] GetPairs() { return new[] { GetPair("key1", "value1", "value2"), GetPair("key2", "value3") }; } KeyValuePair<string, string[]> GetPair(string key, params string[] values) { // 先把键加入数组,再拼接传入的其他值 var combinedValues = new[] { key }.Concat(values ?? Array.Empty<string>()).ToArray(); return new KeyValuePair<string, string[]>(key, combinedValues); }
更简洁的集合初始化器写法
如果不想单独写方法,也可以在集合初始化时直接处理,用nameof可以避免重复写键(注意nameof只适用于合法标识符类型的键):
var dic = new Dictionary<string, IReadOnlyCollection<string>> { ["someKey"] = new[] { "someKey", "anotherValue", "thirdValue" }.AsReadOnly(), // 用nameof避免重复(如果键是变量/标识符) ["anotherKey"] = new[] { nameof(anotherKey), "val1", "val2" }.AsReadOnly() };
批量生成的LINQ写法
如果需要处理大量键,用LINQ批量生成键值对会更高效:
// 定义所有需要的键 var keys = new[] { "keyA", "keyB", "keyC" }; // 定义每个键对应的额外值 var additionalValues = new Dictionary<string, string[]> { ["keyA"] = new[] { "aVal1", "aVal2" }, ["keyB"] = new[] { "bVal" }, ["keyC"] = Array.Empty<string>() }; // 一次性生成包含键自身的Dictionary var dic = keys.ToDictionary( key => key, key => new[] { key }.Concat(additionalValues[key]).ToArray().AsReadOnly() );
内容的提问来源于stack exchange,提问作者Ruslan Kudaybergenov
相关产品推荐
相关产品推荐

