指定它作为一个类型参数,而不是:
public List<IPart> Fetch<T>() where T : IPart
{
return this.PartList.OfType<T>().Cast<IPart>().ToList();
}
你会这样称呼它:
List<IPart> foo = parts.Fetch<Exhaust>();
,如果你知道在编译时的部分类型这很好。如果不这样做,则需要使用反射来基本获取Enumerable<T>
中的OfType()
方法,并从中创建写入通用方法。喜欢的东西:
private static readonly MethodInfo OfTypeMethod =
typeof(Enumerable).GetMethod("OfType");
public List<IPart> Fetch(Type partType)
{
MethodInfo method = OfTypeMethod.MakeGenericMethod(partType);
IEnumerable enumerable = (IEnumerable) method.Invoke
(null, new object[] { PartList });
return enumerable.Cast<IPart>().ToList();
}
您可以添加一个“where T:IPART”一般的限制,即会使它成为你没有得到无效的转换和逻辑错误 – 2009-06-26 06:25:34
哦,好 - 会做。 – 2009-06-26 06:28:07