2
我有幾個泛型類實現了一個通用的非泛型接口。我創建我的通用對象並將它們添加到列表中。我如何使用LINQ或任何其他方法來按照泛型類型過濾列表。在運行時我不需要知道T.我向接口添加了一個類型屬性,並使用LINQ進行過濾,但我希望使用is運算符。這是一個我扔在一起的簡單例子。使用與泛型接口的運算符
任何想法?
interface IOperation
{
object GetValue();
}
class Add<T> : IOperation
{
public object GetValue()
{
return 0.0;
}
}
class Multiply<T> : IOperation
{
public object GetValue()
{
return 0.0;
}
}
private void Form1_Load(object sender, EventArgs e)
{
//create some generics referenced by interface
var operations = new List<IOperation>
{
new Add<int>(),
new Add<double>(),
new Multiply<int>()
};
//how do I use LINQ to find all intances off Add<T>
//without specifying T?
var adds =
from IOperation op in operations
where op is Add<> //this line does not compile
select op;
}
+ 1先生。做得好! – Steve 2009-11-23 17:52:33
請記住,C#4中的協變和逆變僅適用於通用接口和委託,而不適用於類和結構,並且類型參數必須是引用類型。在這個例子中所有的標準都會被滿足嗎? – 2009-11-23 21:41:00
不是爲了上課?我可以很好地使用'ReadonlyList''ReadonlyList