Tôi nghĩ rằng tôi phải mất một cái gì đó, tại sao tôi không thể biên dịch này:Tại sao bạn không thể bỏ một kiểu mở chung bị ràng buộc được nhập vào loại bị ràng buộc?
class Foo<T> where T : Bar
{
T Bar;
}
abstract class Bar
{ }
class MyBar : Bar
{ }
static void Main(string[] args)
{
var fooMyBar = new Foo<MyBar>();
AddMoreFoos(fooMyBar);
}
static void AddMoreFoos<T>(Foo<T> FooToAdd) where T : Bar
{
var listOfFoos = new List<Foo<Bar>>();
listOfFoos.Add(FooToAdd); //Doesn't compile
listOfFoos.Add((Foo<Bar>)FooToAdd); //doesn't compile
}
'nếu bạn gọi phương thức của mình bằng Foo thì cuộc gọi sẽ không thành công' => nhưng cuộc gọi này sẽ không biên dịch vì ràng buộc chung, trong đó T: Bar, không? Tuy nhiên, +1 cho Danh sách mới >() vì điều này thực sự giải quyết được vấn đề thực sự của tôi! –
Điểm tốt về ràng buộc. Bối rối là tại sao bạn chấp nhận câu trả lời khác nếu tôi giải quyết vấn đề của bạn tho ... (Jon Skeet hay không! ;-)) –