Как получить тип элемента абсолютно любой коллекции (IEnumerable) C#?

Допустим, у меня есть объект массива или коллекции. Существует ли универсальный способ извлечь у них тип элемента? Вроде как все они реализуют IEnumerable и ICollection.


Ответы (2 шт):

Автор решения: Alexander Petrov

Полагаю, вам нужны обобщённые методы. Пример:

static void Main()
{
    var arr = new string[] { "a" };
    var list = new List<int> { 1 };

    Method(arr); // System.String
    Method(list); // System.Int32
}

static void Method<T>(IEnumerable<T> enumerable)
{
    Console.WriteLine(typeof(T));
}
→ Ссылка
Автор решения: Antinet

Данным способом можно получить тип элемента любой коллекции.

static void Main()
{
    var arr = new string[] { "a" };
    var list = new List<int> { 1 };

    GetElementType(arr); // System.String
    GetElementType(list); // System.Int32
    Console.ReadKey(true);
}

static void GetElementType(IEnumerable enumerable)
{
    Console.WriteLine(enumerable.GetType().GetInterface("IEnumerable`1").GetGenericArguments()[0]);
}
→ Ссылка