2011-11-22 37 views
5

Bị mắc kẹt.Tại sao mã C# này không biên dịch khi sử dụng các tham số được đặt tên?

class Test 
{ 
    void Main() 
    { 
     F(() => "");    // ok 
     F(named:() => "");   // 'T' cannot be inferred from the usage! 
     F<string>(() => "");  // ok 
     F<string>(named:() => ""); // ok 
    } 

    void F<T>(Func<T> named) { } 
} 

Ai đó có thể cho tôi biết tại sao cuộc gọi thứ hai đến F không biên dịch được?

(Lưu ý rằng đây là một ví dụ bị loại bỏ đáng kể, đó là lý do tại sao nó có vẻ là tổng hợp. Trong trường hợp thực tế tôi thấy, có một số tham số mặc định trước khi 'đặt tên' và tham số được đặt tên là bắt buộc. rõ ràng là đặc điểm kỹ thuật rõ ràng của 'T' của người gọi.)

+1

có vẻ như không đủ trong suy luận kiểu đại biểu của trình biên dịch. – Jeff

+0

Có khả năng là âm thanh. Và nếu bạn đưa ra nhận xét đó thành một câu trả lời, tôi sẽ chấp nhận nó. – scobi

Trả lời

1

Có vẻ như không đủ trong suy luận kiểu đại biểu của trình biên dịch ... xin lỗi tôi không thể cung cấp thêm.

+0

Tại sao lại là downvote? Không ai khác quan tâm đến câu trả lời và tác giả đã nói "Có vẻ như âm thanh. Và nếu bạn đưa ra nhận xét đó thành một câu trả lời, tôi sẽ chấp nhận nó." – Jeff

+0

Ít nhất tôi có thể đẩy nó trở lại 0 với phiếu bầu của tôi, heh. – scobi

Các vấn đề liên quan