Jus*_*ony 4 c# generics variance
我有以下方法:
public Option<IAppSettings> GetFirst<T>() where T : IAppSettings
{
return _sources.Where(x=>x.GetType() == typeof(T)).FirstOption();
}
List<IAppSettings> _sources;
Run Code Online (Sandbox Code Playgroud)
但是,我想将签名更改为:
public Option<T> GetFirst<T>() where T : IAppSettings
Run Code Online (Sandbox Code Playgroud)
请注意,我将返回通用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/en-us/library/vstudio/bb360913(v=vs.100).aspx
你得到的问题是,简单地对类型进行"if"检查实际上不会将其转换为T; 一旦它通过了过滤,集合对象仍然只是类型IAppSettings.我提到的C#标准功能会为你做到这一点.
| 归档时间: |
|
| 查看次数: |
2192 次 |
| 最近记录: |