C# không đòi hỏi bạn phải xác định một tham số kiểu generic nếu trình biên dịch có thể suy ra nó, ví dụ:Tại sao không hỗ trợ C# ngụ ý các loại chung trên các nhà xây dựng lớp?
List<int> myInts = new List<int> {0,1,1,
2,3,5,8,13,21,34,55,89,144,233,377,
610,987,1597,2584,4181,6765};
//this statement is clunky
List<string> myStrings = myInts.
Select<int,string>(i => i.ToString()).
ToList<string>();
//the type is inferred from the lambda expression
//the compiler knows that it's taking an int and
//returning a string
List<string> myStrings = myInts.
Select(i => i.ToString()).
ToList();
này là cần thiết cho các loại vô danh mà bạn không biết những gì các tham số kiểu sẽ là (trong intellisense nó hiển thị như 'a
) bởi vì nó được thêm vào bởi trình biên dịch. tham số kiểu
Lớp cấp không cho phép bạn làm điều này:
//sample generic class
public class GenericDemo<T>
{
public GenericDemo (T value)
{
GenericTypedProperty = value;
}
public T GenericTypedProperty {get; set;}
}
//why can't I do:
int anIntValue = 4181;
var item = new GenericDemo(anIntValue); //type inference fails
//however I can create a wrapper like this:
public static GenericDemo<T> Create<T> (T value)
{
return new GenericDemo<T> (value);
}
//then this works - type inference on the method compiles
var item = Create(anIntValue);
Tại sao không C# hỗ trợ mức lớp này chung chung kiểu suy luận?
Tại sao câu hỏi này có một cuộc bỏ phiếu để chống lại nó như là một bản sao của [Tại sao không thể loại suy luận hàm tạo C#?] (http://stackoverflow.com/questions/3570167) khi câu hỏi đó là hai năm gần đây hơn? Chắc chắn đó là bản sao? – Keith
Tôi nghĩ rằng câu hỏi khác là ngắn gọn hơn, và nó có một câu trả lời tốt hơn. – Sam
@Sam - vâng, câu trả lời của Eric Lippert cho câu hỏi đó là có thẩm quyền, nhưng tôi không nghĩ một trong hai câu hỏi nên được đóng lại. – Keith