man*_*art 2 .net c# portable-class-library
我目前有一个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>.
}
Run Code Online (Sandbox Code Playgroud)
该库为上面的.NET 4.0和SL 5完美地构建和测试.
任何其他目标(SL 4,Windows手机等)导致转换消息编译失败:
Error 2 Argument 2: cannot convert from 'System.Func<IThing<T>>' to 'System.Func<object>'
Run Code Online (Sandbox Code Playgroud)
有什么建议?
那是因为Func<T>在.NET 3.5中以这种方式声明了
public delegate TResult Func<TResult>()
Run Code Online (Sandbox Code Playgroud)
从.NET4开始,声明更改为
public delegate TResult Func<out TResult>()
Run Code Online (Sandbox Code Playgroud)
注意out.NET 3.5声明中缺少关键字.它使通用类型协变.您可以在MSDN上阅读关于.NET 协方差和逆变支持的非常好的解释.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |