此代码在Unity控制台中抛出错误CS0309,但在.NET中运行良好。
public class Bar { }
public class Foo<TBar>
where TBar : Bar
{
}
public class Test<TClass>
{
public void Run<TFoo, TBar, TSomething>(TSomething something)
where TFoo : Foo<TBar>
where TBar : Bar
{
Action del = delegate
{
var a = something;
};
}
}
这给了我错误:
error CS0309: The type `TFoo' must be convertible to `Foo<TFoo>' in order to use it as parameter `TFoo' in the generic type or method `Test<TClass>.<Run>c__AnonStorey0<TFoo,TBar,TSomething>'
我发现了类似的question,看起来这可能是Unity使用的旧版Mono中的错误。但是,我的代码与问题中的代码略有不同。
更有趣的是,从该代码中删除几乎任何部分都会删除错误:
如果从Run()方法中删除泛型约束,则编译器错误消失
如果删除&#34; var a = something;&#34;来自委托,错误消失了(!)
如果你移动&#34; var a =某事;&#34;在代表之外,错误也消失了(!!)
最后,如果从Test类中删除TClass泛型类型,错误就会消失(!!!)
有没有人知道这里会发生什么?看起来我有一个非常独特的因素组合。