Untuk membuatnya sebersih mungkin saya ingin membiarkan compiler melakukan semua pekerjaan. Tidak ada gips (jadi tipe ini aman). Tidak ada Library pihak ketiga (System.Linq) yang digunakan (Tanpa overhead runtime).
public static IEnumerable<T> GetEnumerable<T>(this T[] arr)
{
return arr;
}
// Dan untuk menggunakan kode:
String[] arr = new String[0];
arr.GetEnumerable().GetEnumerator()
Ini memanfaatkan beberapa keajaiban kompiler yang menjaga semuanya tetap bersih.
Hal lain yang perlu diperhatikan adalah bahwa jawaban saya adalah satu-satunya jawaban yang akan melakukan pengecekan waktu kompilasi.
Untuk solusi lain yang mana pun jika jenis "arr" berubah, maka kode pemanggil akan dikompilasi, dan gagal saat runtime, yang mengakibatkan bug runtime.
Jawaban saya akan menyebabkan kode tidak dapat dikompilasi dan oleh karena itu peluang saya untuk mengirimkan bug dalam kode saya lebih kecil, karena ini akan memberi sinyal kepada saya bahwa saya menggunakan jenis yang salah.