我有以下可行的方法:
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
我收到错误消息(类型被截断):
无法将表达式类型转换
Option<IAppSettings>
为Option<T>
我知道这事做泛型,但不可否认他们吮吸....我试过的不同手段in
,out
,interface
,delegate
...但没有工作,因为这是用一个实例上的非通用类的方法变量。
这有可能吗?
更新的想法
我是否需要更改中的类型规格Option
?如果是这样,我猜它一定是Option<in T>
?我说这只是因为Scala的Option
键入方式与Option[+A]
我的来源相同Option
,但是更改并推高它很麻烦...所以我想先在这里问一下,然后再尝试
这Option
来自我的鳞片叉子
您正在寻找Enumerable.OfType
方法。这应该代替您的Where()
方法。
https://msdn.microsoft.com/zh-CN/library/vstudio/bb360913(v=vs.100).aspx
您遇到的问题是,仅对类型执行“ if”检查实际上不会将其强制转换为T
; 一旦通过了过滤,收集对象仍然仅是type IAppSettings
。我提到的C#标准函数将为您完成此任务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句