繁体   English   中英

无法分配给Func <Interface> 来自Func <T>

[英]Cannot assign to Func<Interface> from Func<T>

如果我有

public class MyClass
{
    public Func<IModel> InputFunc { get; set; }
}

并尝试做

public void SetInput<TInput>(Func<TInput> funcInput) where TInput:IModel
{
   ...
   var c = new MyClass();
   c.InputFunc = funcInput;
   ...
}

我遇到编译错误

 Cannot implicitly convert type 'System.Func<TInput>' to 'System.Func<IModel>'

这是为什么造成的? 我该如何克服这个问题? (我尝试了where子句,但没有帮助)

两种可能性:

  1. 您可能正在使用C#3 / .NET 3.5(或更早版本)。

    接口和委托的通用协方差仅在C#4中引入。

  2. 只是因为您不需要TInput是引用类型。 尝试这个:

     void SetInput<TInput>(Func<TInput> func) where TInput : class, IModel 

    这是必需的,因为否则TInput可能是实现IModel值类型 (我假设IModel是接口),并且值类型不支持协方差(由于表示形式的差异)。

我刚刚尝试了额外的约束,在C#4中就可以了。

铸造功能<t>功能<object><div id="text_translate"><p>我试图弄清楚如何将Func&lt;T&gt;传递给Func&lt;object&gt;方法参数:</p><pre> public void Foo&lt;T&gt;(Func&lt;T&gt; p) where T: class { Foo(p); } public void Foo(Func&lt;object&gt; p) { }</pre><p> <strong>奇怪的是,它适用于 NET 4.0 Class 库,但不适用于 Silverlight 4 Class 库。</strong> 实际上我希望它在 Silverlight 中工作,并且我输入了诸如Func&lt;T, bool&gt;之类的参数</p></div></object></t>

[英]Casting Func<T> to Func<object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM