2017-01-09 34 views
0

比較泛型類的我怎麼能寫出下面的代碼與is T如何在C#

public IList<IElement> OfClass(Type type) 
{ 
    return list 
     .Where(o => o.GetType() == type) 
     .ToList(); 
} 

事情是這樣的:

public IList<IEtabsElement> OfClass(....) 
{ 
    return list 
     .Where(o => o is ...) 
     .ToList(); 
} 

UPDATE 這是我的解決方案,到目前爲止。好嗎?

public IList<IElement> OfClass<T>() 
{ 
    return list 
     .Where(o => o is T) 
     .ToList(); 
} 
+0

什麼是 '清單'在'返回列表'中?這應該是一個傳遞給你的函數的參數嗎? –

+3

那麼你需要它是一個通用的方法......但也許你正在尋找現有的'OfType'方法? –

+0

@JasonBoyd列表是類定義類中的字段:private IList list; – Vahid

回答

2

您可以創建,而不是一個通用的方法:

public IList<T> OfClass<T>() 
{ 
    return list 
     .Where(o => o.GetType() == typeof(T)) 
     .ToList(); 
} 

這會工作,但相同的現有方法OfType,例如:

var myvehicles = new List<Vehicle> { new Car(), new Bike()}; 
var mycars = myvehicles.OfType<Car>(); 
+1

'o.GetType()== typeof(T)'與'o是T'不一樣。假設例如'T'是一個接口或一個抽象類。然後'GetType()'永遠不能給'typeof(T)';實際(運行時)類型將是具體的。但是詢問'o是T'還是有意義的。 ___編輯:___在你的例子中,如果列表中有一個'RacingCar'(這是一輛'Car',但其類型不完全是'Car''),你想要什麼? –

+0

@ Kenneth謝謝Kenneth,你的回答和Jeppe的評論指出了我正確的方向。 – Vahid

+0

@JeppeStigNielsen我用一個答案更新了原始問題。這是你的意思嗎? – Vahid