Aby uczynić go tak czystym, jak to tylko możliwe, wolę pozwolić kompilatorowi wykonać całą pracę. Nie ma rzutów (więc w rzeczywistości jest bezpieczny dla typów). Nie są używane żadne biblioteki innych firm (System.Linq) (brak narzutu czasu wykonywania).
public static IEnumerable<T> GetEnumerable<T>(this T[] arr)
{
return arr;
}
// I żeby użyć kodu:
String[] arr = new String[0];
arr.GetEnumerable().GetEnumerator()
Wykorzystuje to pewną magię kompilatora, która utrzymuje wszystko w czystości.
Inną kwestią, na którą należy zwrócić uwagę, jest to, że moja odpowiedź jest jedyną odpowiedzią, która będzie sprawdzać podczas kompilacji.
W przypadku innych rozwiązań, jeśli typ „arr” ulegnie zmianie, wywołanie kodu zostanie skompilowane i zakończy się niepowodzeniem w czasie wykonywania, co spowoduje błąd w czasie wykonywania.
Moja odpowiedź spowoduje, że kod się nie skompiluje i dlatego mam mniejsze szanse na wysłanie błędu w moim kodzie, ponieważ sygnalizowałoby to, że używam niewłaściwego typu.