我有一个实现某些接口的类:
public interface IMyInterface
{
string GetKey();
void SetData(List<int> data);
}
public class A : IMyInterface { .. }
public class B : IMyInterface { .. }
我有一个方法可以获取这些类的集合并做同样的事情:
public void methodA(List<A> items)
{
foreach(var item in items)
{
// do something with A.GetKey();
// do something with A.SetData();
}
}
public void methodB(List<B> items)
{
foreach(var item in items)
{
// do something with B.GetKey();
// do something with B.SetData();
}
}
我想将此方法设为通用:
public GenericMethod<T>(T items) where T: IEnumerable
{
for(var item in items)
{
// how can I get the item.GetKey();
}
}
如何向编译器说T:Inumerable的元素实现IMyInterface并使用方法GetKey()?
答案 0 :(得分:6)
public void GenericMethod<T>(IEnumerable<T> items)
where T : IMyInterface
{
for(var item in items)
{
// how can I get the item.GetKey();
}
}
虽然在目前的情况下你并不需要使用仿制药:
public void GenericMethod(IEnumerable<IMyInterface> items)
{
for(var item in items)
{
// how can I get the item.GetKey();
}
}
答案 1 :(得分:4)
您可以制定约束:where T: IEnumerable<IMyInterface>
但是你甚至不需要它,只能让你的参数成为IEnumerable<T>
...
或者,如果您只需要IMyInterface
,则可以完全避免使用泛型并传递IEnumerable<IMyInterface>
参数
顺便说一下:你的语法都错了
使用所有三种方法