Để làm cho nó sạch nhất có thể, tôi muốn để trình biên dịch thực hiện tất cả công việc. Không có phôi (vì vậy nó thực sự là loại an toàn). Không sử dụng Thư viện của bên thứ ba (System.Linq) (Không có chi phí thời gian chạy).
public static IEnumerable<T> GetEnumerable<T>(this T[] arr)
{
return arr;
}
// Và để sử dụng mã:
String[] arr = new String[0];
arr.GetEnumerable().GetEnumerator()
Điều này tận dụng một số phép thuật của trình biên dịch giúp giữ mọi thứ sạch sẽ.
Điểm khác cần lưu ý là câu trả lời của tôi là câu trả lời duy nhất sẽ kiểm tra thời gian biên dịch.
Đối với bất kỳ giải pháp nào khác nếu kiểu "arr" thay đổi, thì mã gọi sẽ biên dịch và không thành công trong thời gian chạy, dẫn đến lỗi thời gian chạy.
Câu trả lời của tôi sẽ khiến mã không được biên dịch và do đó tôi ít có cơ hội gửi lỗi trong mã của mình hơn, vì nó sẽ báo hiệu cho tôi biết rằng tôi đang sử dụng sai loại.