初始化IRule接口列表报错:无法将void转换为IRule
集合初始化语法误用导致的类型转换错误
实现了IRule接口的testing类实例完全可以作为List
错误原因
你在new List<IRule>()的初始化器中写了Rules.Add(new testing()),但List<T>.Add()方法的返回值是void(没有返回值),而集合初始化器要求大括号内的每一项都是IRule类型的元素。编译器会把你写的Add方法调用的返回值(void)当成要加入列表的元素,自然会报“无法从void转换为IRule”的错误。
两种正确写法
写法一:正确使用集合初始化器
直接在大括号里列出要添加的实例,编译器会自动帮你调用Add方法:
public class SomeClass { List<IRule> Rules { get; set; } public SomeClass() { Rules = new List<IRule>() { new testing() }; } }
写法二:先初始化空列表,再手动调用Add
分开初始化列表和添加元素,逻辑更清晰:
public class SomeClass { List<IRule> Rules { get; set; } public SomeClass() { Rules = new List<IRule>(); Rules.Add(new testing()); } }
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

