指定它作爲一個類型參數,而不是:
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