我正在尝试返回IEnumerable<IMyInterface>
。我有一个类MyClass:IMyInterface
,我从一个函数返回。
IEnumerable<IMyInterface> test() {
tmpList = new List<MyClass>();
tmp1 = new MyClass();
tmp2 = new MyClass();
tmpList.Add(tmp1);
tmpList.Add(tmp2);
return tmpList;
}
编译器不会允许,这对我来说似乎很奇怪,因为MyClass:MyInterface。编译器会在'cannot implicitly convert type System.Collections.Generic.IEnumerable<MyClass> to System.Collections.Generic.IEnumerable<IMyInterface. An explicit conversion exists. Are you missing a cast?'
如果没有在运行时抛出异常,我无法执行return (IEnumerable<IMyInterface>)tmp
。我错过了什么?我希望返回IEnumerable接口应该可以正常工作。
答案 0 :(得分:5)
你应该这样做:
IEnumerable<IMyInterface> test() {
tmpList = new List<IMyInterface>(); // this is the important bit
tmp1 = new MyClass();
tmp2 = new MyClass();
tmpList.Add(tmp1);
tmpList.Add(tmp2);
return tmpList;
}
或者,你可以这样做:
return tmpList.Cast<IMyInterface>(); // requires using System.Linq in usings
答案 1 :(得分:2)
使用yield return
代替return
。这会将一个简单的对象转换为对象的枚举!
IEnumerable<IMyInterface> test() {
yield return new MyClass();
yield return new MyClass();
yield return new MyClass();
}
创建实现接口的三个对象的枚举。
编辑:
或者更改方法的返回类型以返回单个项目。
IMyInterface test() {
return new MyClass();
}