É possível saber o tipo de elemento em tempo de compilação sem uma classe implementando IEnumerable <T>?

resumo

Ignore o caso de que um objeto não pode ser representado como um array, é possível definir um método de extensão (estático) como:

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

e retorna a matriz de um objeto se ele consiste em qualquer sequência de elementos? E se sim, o que seria? estar?

explicação

Eu pensei sobre as seguintes declarações:

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

Mas eu não posso presumir que uma classe desconhecida deve ter implementadoIEnumerable<T> ouIEnumerable. Eu não posso nem definir o? no caso, é apenasIEnumerable que está fora da definição genérica.

E eu também pensei sobre oArray classe:

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

Mas isso significa que o tipo de elemento era desconhecido em tempo de compilação.

Então, eu estou querendo saber é possível saber o tipo de elemento em tempo de compilação sem uma implementação de classeIEnumerable<T>?

questionAnswers(3)

yourAnswerToTheQuestion