[英]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子句,但没有帮助)
两种可能性:
您可能正在使用C#3 / .NET 3.5(或更早版本)。
接口和委托的通用协方差仅在C#4中引入。
只是因为您不需要TInput
是引用类型。 尝试这个:
void SetInput<TInput>(Func<TInput> func) where TInput : class, IModel
这是必需的,因为否则TInput
可能是实现IModel
的值类型 (我假设IModel
是接口),并且值类型不支持协方差(由于表示形式的差异)。
我刚刚尝试了额外的约束,在C#4中就可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.