biên dịch C# có thể suy ra một cách chính xác loại s (string) trong những đoạn:IEnumerable <Func<T,S>> và LINQ suy luận kiểu
Func<int, string, string> f1 = (n, s) => s.Substring(n);
Func<int, Func<string, string>> f2 = n => s => s.Substring(n);
Nhưng nó không thể trong vụ việc này [1]:
var numbers = Enumerable.Range(1, 10);
IEnumerable<Func<string, string>> fs = numbers.Select(n => s => s.Substring(n));
để làm cho nó làm việc người ta phải làm một cái gì đó như thế này:
var fs = numbers.Select(n => new Func<string, string>(s => s.Substring(n));
hoặc
var fs = numbers.Select(f2);
Và câu hỏi đặt ra là - tại sao suy luận kiểu không hoạt động trong [1] nếu tất cả thông tin cần thiết về các loại được biết trước?
Cảm ơn câu trả lời nhanh chóng của bạn. Đó là một sự xấu hổ rằng nó không hoạt động theo cách tôi nghĩ trong C#. Có thể tôi bị hư hỏng bởi f #, nơi những thứ như cho fs: (string -> string) seq = numbers |> Seq.map (vui vẻ n -> fun s -> s.Substring (n)) là có thể. – rkrahl
@rkrahl: Vâng, suy luận kiểu trong F # chắc chắn là mạnh mẽ hơn. –