我想我一定是失去了一些東西,我爲什麼不能編譯這個:爲什麼你不能強制約束型開放泛型?
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
}
'如果你打電話給你的方法使用Foo那麼調用會失敗'=>但是這個調用不會編譯,因爲通用約束,其中T:Bar,不是?但是,新列表+1 >(),因爲這實際上解決了我真正的問題! –
2010-07-03 15:26:01
約束的好處。如果我解決了你的問題,爲什麼你接受了其他答案?(Jon Skeet or not!;-)) – 2010-07-03 15:34:16