使用嵌套泛型和System.Action

时间:2016-09-22 20:29:39

标签: c# generics mono

此代码在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泛型类型,错误就会消失(!!!)

有没有人知道这里会发生什么?看起来我有一个非常独特的因素组合。

0 个答案:

没有答案