如何编写Fifteen方法以使其可加入Dictionary集合初始化器?
解决Dictionary初始化器兼容Fifteen方法的问题
你遇到的CS7036编译错误,核心原因是Dictionary的集合初始化器只接受两种合法元素:
- 直接的
KeyValuePair<TKey, TValue>实例 - 可以被解构为键、值两个参数的类型(比如C#值元组)
你之前返回的匿名对象无法被初始化器识别为合法元素,所以才会报错。这里有两种简洁可行的解决方案:
方案1:返回KeyValuePair类型
直接让Fifteen方法返回Dictionary原生支持的键值对类型,这是最直观的方式:
class Program { static void Main(string[] args) { var a = new Dictionary<string, int>() { { "12", 12 }, { "13", 13 }, Fifteen() }; } static KeyValuePair<string, int> Fifteen() { // 两种写法都可行,C#支持元组到KeyValuePair的隐式转换 return new KeyValuePair<string, int>("15", 15); // 或者简化写成:return ("15", 15); } }
方案2:返回值元组
C#的值元组会被集合初始化器自动解构为Dictionary的Add方法所需的两个参数,因此也能直接兼容:
class Program { static void Main(string[] args) { var a = new Dictionary<string, int>() { { "12", 12 }, { "13", 13 }, Fifteen() }; } static (string key, int value) Fifteen() { return ("15", 15); } }
这两种方式都能让你期望的代码正常编译运行,本质都是让Fifteen的返回值符合Dictionary初始化器的元素要求——要么是现成的键值对,要么是能拆分成键和值的结构。
内容的提问来源于stack exchange,提问作者foxx1337
相关产品推荐
相关产品推荐

