¿Es posible conocer el tipo de elemento en tiempo de compilación sin una clase que implemente IEnumerable <T>?

resumen

Ignore el caso de que un objeto no pueda representarse como una matriz, ¿es posible definir un método de extensión (estático) como:

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

y devuelve la matriz de un objeto si consta de cualquier secuencia de elementos? Y si es así, ¿cuál sería la? ¿ser?

explicación

He pensado en las siguientes declaraciones:

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

Pero no puedo asumir que una clase desconocida haya sido implementada.IEnumerable<T> oIEnumerable. Ni siquiera puedo definir el? en el caso es soloIEnumerable que está fuera de definición genérica.

Y también he pensado en elArray clase:

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

Pero eso significa que el tipo de elemento era desconocido en tiempo de compilación.

Así que me pregunto si es posible saber el tipo de elemento en tiempo de compilación sin una clase implementadaIEnumerable<T>?

Respuestas a la pregunta(3)

Su respuesta a la pregunta