Можно ли узнать тип элемента во время компиляции без класса, реализующего IEnumerable <T>?

резюме

Не обращайте внимания на случай, когда объект не может быть представлен в виде массива, возможно ли определить метод расширения (статический), например:

public static ? ToArray<TSource>(this TSource source); 

и возвращает массив объекта, если он состоит из какой-либо последовательности элементов? И если да, что бы?&nbsp;быть?

объяснение

Я думал о следующих декларациях:

public static TElement[] ToArray<TElement>(this IEnumerable<TElement> source); 
public static ? ToArray<TSource>(this IEnumerable source); 

Но я не могу предположить, что неизвестный класс должен быть реализованIEnumerable<T>&nbsp;или жеIEnumerable, Я даже не могу определить?&nbsp;в случае, если это простоIEnumerable&nbsp;который вне общего определения.

И я также думал оArray&nbsp;класс:

public static Array ToArray<TSource>(this TSource source); 

Но это означает, что тип элемента был неизвестен во время компиляции.

Так что мне интересно, возможно ли узнать тип элемента во время компиляции без реализации классаIEnumerable<T>?