我有以下有效的方法:
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
来自于我的scalesque分支
public class Parent<T>{}
?在这种情况下,该泛型类型可能会影响该方法。 - Travis Jsources
是一个List<IAppSettings>
。 - Justin Pihony