Обобщенный список List

168
24 февраля 2022, 08:00

Как правильно поступить, у меня есть интерфейс(ICommon<T>), есть его несколько реализаций (HelloInt:ICommon<int>, HelloDouble:ICommon<double>). Теперь я хотел бы создать список List<ICommon<T>>. Как это реализовать, и реализуется ли это вообще.

class Program
{
    static void Main(string[] args)
    {
        List<ICommon<T>> com = new List<ICommon<T>>()
        {
            new HelloInt(),
            new HelloDouble()
        };
    }
}
public interface ICommon<T> 
{
    T Hello();
}
public class HelloInt : ICommon<int>
{
    public int Hello()
    {
        return 1;
    }
}
public class HelloDouble : ICommon<double>
{
    public double Hello()
    {
        return 2.0;
    }
}
Answer 1
var list = new ArrayList() { new HelloInt(), new HelloDouble() };

что мешает сделать так?

Answer 2

Вам нужно при использовании вашего интерфейса указывать не шаблон, а конкретный тип.

Например:

public interface ITest<T> where T: class
{
    T TestMethod1();
    T TestMethod2();
}
List<ITest<object>> testObjects = new List<ITest<object>>();
Answer 3
var list = new List<Object> { new HelloInt(), new HelloDouble() };  
Console.WriteLine(((ICommon<int>)list[0]).Hello());

либо

ArrayList arrayList = new ArrayList() { new HelloDouble(), new HelloInt() };
Console.WriteLine(((ICommon<double>)arrayList[0]).Hello());
READ ALSO
Найти количество неверных ударений в тексте

Найти количество неверных ударений в тексте

Учительница задала Пете домашнее задание — в заданном тексте расставить ударения в словах, после чего поручила Васе проверить это домашнее...

98
Как выделить элемент ListBox другим цветом

Как выделить элемент ListBox другим цветом

В ListBox загонятеся отсортированный массив с числами по убываниюКак можно можно выделить первые 3 элемента другим цветом

142
Очистить кэш Redis программно

Очистить кэш Redis программно

В своём приложении я использую Redis в качестве кэш-хранилища, куда в процессе работы заносятся разные данныеНекоторые хранятся там временно...

86
Как реализовать алгоритм заливки в Unity?

Как реализовать алгоритм заливки в Unity?

У меня есть заготовка игры

116