gpt4 book ai didi

c# - 无法将表达式类型转换为返回类型

转载 作者:太空狗 更新时间:2023-10-30 01:03:21 26 4
gpt4 key购买 nike

我有以下有效的方法:

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 ...但没有一个起作用,因为这是使用实例变量的非泛型类上的方法。

这可能吗?

更新的想法

我是否必须更改 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# 标准函数将为您完成这项工作。

关于c# - 无法将表达式类型转换为返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29685584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com