Nói rằng tôi có phương pháp sau:C# suy luận kiểu không thành công với phương pháp có chứa các thông số mặc định
static int MethodWithDefaultParameters(int a, int b=0, int c=1)
{
return a + b + c;
}
Và sau đó tôi sử dụng phương pháp này trong một truy vấn LINQ như vậy:
Enumerable.Range(1,10).Select(MethodWithDefaultParameters);
này không thành công với :
Lỗi 1 Đối số kiểu cho phương thức 'System.Linq.Enumerable.Select (System.Collections.Generic.IEnumerable, System.Func)' không thể bị xâm phạm rred từ việc sử dụng. Hãy thử xác định các đối số kiểu một cách rõ ràng.
Tất nhiên, tôi có thể làm việc này bằng cách chèn một lambda để chuyển tiếp cuộc gọi chức năng như thế này:
Enumerable.Range(1,10).Select(i => MethodWithDefaultParameters(i));
Nhưng câu hỏi của tôi là tại sao những suy luận kiểu thất bại? Theo như tôi có thể nói, nó không nên mơ hồ vì chỉ có một biến thể của hàm thỏa mãn biến đầu vào.
Câu trả lời hay! – Enigmativity
Aha, do đó, theo như công cụ suy luận loại có liên quan chữ ký cho MethodWithDefaultParameters sẽ luôn luôn có ba đối số - tức là nó sẽ không bao giờ nhìn thấy một phiên bản chỉ có một tham số. Cảm ơn lời giải thích! – Thaddeus