You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需重复代码初始化含键对应值的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:40:07