无法将表达式类型转换为 return 类型
Cannot convert expression type to return type
我有以下有效的方法:
public Option<IAppSettings> GetFirst<T>() where T : IAppSettings
{
return _sources.Where(x=>x.GetType() == typeof(T)).FirstOption();
}
List<IAppSettings> _sources;
但是,我想将签名更改为:
public Option<T> GetFirst<T>() where T : IAppSettings
请注意,我返回的是通用 T
而不是 IAppSettings
我收到错误(截断类型):
Cannot convert expression type Option<IAppSettings>
to Option<T>
我知道这与泛型有关,但不可否认它们很糟糕....我尝试了 in
、out
、interface
的不同方法delegate
...但是 none 起作用,因为这是使用实例变量的非泛型 class 上的方法。
这可能吗?
更新的想法
我是否必须更改 Option
中的类型规范?如果是这样,我猜它必须是 Option<in T>
?我说那只是因为 Scala 的 Option
被输入为 Option[+A]
我有 Option
的源代码,但是改变和向上推是一件痛苦的事情......所以我想我会先在这里问, 但接下来会尝试
此 Option
来自 my fork of scalesque
您正在寻找 Enumerable.OfType
方法。这应该取代您的 Where()
方法。
https://msdn.microsoft.com/en-us/library/vstudio/bb360913(v=vs.100).aspx
您遇到的问题是,简单地对类型进行 "if" 检查实际上不会将其转换为 T
;一旦通过过滤,集合对象仍然只知道类型 IAppSettings
。不过,我提到的 C# 标准函数会为您做到这一点。
在 .FirstOption() 之前添加 .OfType()。
我有以下有效的方法:
public Option<IAppSettings> GetFirst<T>() where T : IAppSettings
{
return _sources.Where(x=>x.GetType() == typeof(T)).FirstOption();
}
List<IAppSettings> _sources;
但是,我想将签名更改为:
public Option<T> GetFirst<T>() where T : IAppSettings
请注意,我返回的是通用 T
而不是 IAppSettings
我收到错误(截断类型):
Cannot convert expression type
Option<IAppSettings>
toOption<T>
我知道这与泛型有关,但不可否认它们很糟糕....我尝试了 in
、out
、interface
的不同方法delegate
...但是 none 起作用,因为这是使用实例变量的非泛型 class 上的方法。
这可能吗?
更新的想法
我是否必须更改 Option
中的类型规范?如果是这样,我猜它必须是 Option<in T>
?我说那只是因为 Scala 的 Option
被输入为 Option[+A]
我有 Option
的源代码,但是改变和向上推是一件痛苦的事情......所以我想我会先在这里问, 但接下来会尝试
此 Option
来自 my fork of scalesque
您正在寻找 Enumerable.OfType
方法。这应该取代您的 Where()
方法。
https://msdn.microsoft.com/en-us/library/vstudio/bb360913(v=vs.100).aspx
您遇到的问题是,简单地对类型进行 "if" 检查实际上不会将其转换为 T
;一旦通过过滤,集合对象仍然只知道类型 IAppSettings
。不过,我提到的 C# 标准函数会为您做到这一点。
在 .FirstOption() 之前添加 .OfType()。