2017-01-09 36 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