- Tại sao tôi không thể sử dụng một ràng buộc của
where T : System.ValueType
? - Tại sao Microsoft ngăn chặn loại này khỏi bị ràng buộc?
Ví dụ:Tại sao tôi không thể sử dụng System.ValueType làm ràng buộc generics?
Tại sao tôi không thể thực hiện như sau?
// Defined in a .Net class
public void bar<T>(T a) where T : ValueType {...}
// Defined in my class
public void foo<T>(T a) where T : ValueType
{ bar<T>(a); }
Sự khác biệt trong việc sử dụng cấu trúc trên ValueType là gì?
// Defined in my class
public void foo<T>(T a) where T : struct
{ bar<T>(a); }
Tôi phải nói, tôi đã luôn luôn tự hỏi bởi chúng tôi không thể giới hạn chúng như 'nơi T: struct, System.Enum'. Nó sẽ * rất hữu ích * vào những lúc! –
Bạn _can_ thực sự làm 'trong đó T: Enum' và' trong đó T: ValueType' trong F # (sử dụng cú pháp 'khi 'T:> Enum') và thực sự, nó hoạt động như Jon mong đợi nó hoạt động. Đối với ràng buộc kiểu enum, nó hoạt động với các enums chung như 'enum' và 'Hệ thống.Enum', và chính xác cấm các loại giá trị đồng nghĩa như 'byte' hoặc' int'. Để trả lời câu hỏi của Jon cho "tại sao", nó rất khó để thêm vào C#, hãy xem cuộc thảo luận Roslyn này: https://github.com/dotnet/roslyn/issues/262 –
Abel