gpt4 book ai didi

c# - PCL - 对于某些目标,无法从 Func> 转换为 Func
转载 作者:行者123 更新时间:2023-11-30 20:03:14 34 4
gpt4 key购买 nike

我目前有一个 PCL 库,其中包含一个类似这样的工厂(更改名称以保护无辜者):

public abstract class ThingFactory : IThingFactory
{
private readonly Dictionary<string, Func<object>> _registrations = new Dictionary<string, Func<object>>();

protected void Register<T>(string name, Func<IThing<T>> resolver) where T : IModel<T>
{
_registrations.Add(name, resolver);
}

// ... Resolve casts invocation back to IThing<T>.
}

该库为 .NET 4.0 以上版本和 SL 5 完美构建和测试。

任何其他目标(SL 4、Windows 手机等)会导致编译失败并显示转换消息:

Error 2 Argument 2: cannot convert from 'System.Func<IThing<T>>' to 'System.Func<object>'

有什么建议吗?

最佳答案

那是因为 Func<T>在 .NET 3.5 中以这种方式声明

public delegate TResult Func<TResult>()

从 .NET4 开始,声明更改为

public delegate TResult Func<out TResult>()

注意缺少out .NET 3.5 声明中的关键字。它使泛型类型协变。您可以阅读有关 .NET 的非常好的解释 covariance and contravariance MSDN 上的支持。

关于c# - PCL - 对于某些目标,无法从 Func<IThing<T>> 转换为 Func<Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566358/

34 4 0