tôi mong đợi việc thực hiện Enumerable.Empty() để được chỉ này:Tại sao Enumerable.Empty() trả về một mảng trống?
public static IEnumerable<TResult> Empty<TResult>()
{
yield break;
}
Nhưng việc thực hiện là một cái gì đó như thế này:
public static IEnumerable<TResult> Empty<TResult>()
{
return EmptyEnumerable<TResult>.Instance;
}
internal class EmptyEnumerable<TElement>
{
private static volatile TElement[] instance;
public static IEnumerable<TElement> Instance
{
get
{
if (EmptyEnumerable<TElement>.instance == null)
EmptyEnumerable<TElement>.instance = new TElement[0];
return (IEnumerable<TElement>)EmptyEnumerable<TElement>.instance;
}
}
}
Tại sao việc thực hiện phức tạp hơn chỉ là một dòng mã? Có một lợi thế để trả về một mảng được lưu trong bộ nhớ cache và không (lợi nhuận) trả về không có phần tử nào không?
Lưu ý: Tôi sẽ không bao giờ dựa vào các chi tiết triển khai của một phương pháp, nhưng tôi chỉ tò mò.
'năng suất break' là một dòng trong C#, nhưng nó phức tạp hơn nếu bạn nhìn tại mã IL được tạo ra. – Dirk