У меня есть несколько общих классов, которые реализуют общий не общий интерфейс. Я создаю свои общие объекты и добавляю их в список. Как я могу использовать LINQ или любой другой метод, чтобы фильтровать список по типу generic. Мне не нужно знать Т во время выполнения. Я добавил свойство type в интерфейс и использовал 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
Помните, что ковариация и контравариантность в C# 4 применяются только к общим интерфейсам и делегатам, а не к классам и структурам, а аргументы типа должны быть ссылочными типами. Будут ли выполнены все эти критерии в этом примере? –
Не для занятий? Я вполне могу использовать 'ReadonlyList' с 'ReadonlyList