gpt4 book ai didi

c# - 使用 LINQ IEnumerable.ToDictionary() 时无法将类隐式转换为基类

转载 作者:行者123 更新时间:2023-12-03 03:38:16 25 4
gpt4 key购买 nike

我遇到以下情况,这让我很困惑。

给定:

public class ThermoRawFile : MsDataFile { }

public abstract class MSDataFile { }

我无法运行此 LINQ IEnumerable.ToDictionary() 方法:

IEnumerable<string> rawFiles;
Dictionary<string, MSDataFile> dataFiles = rawFiles.ToDictionary(
file => file,
file => new ThermoRawFile(file)
);

编译器给出以下错误:

"Cannot implicitly convert type System.Collections.Generic.Dictionary<string,CSMSL.IO.Thermo.ThermoRawFile> to System.Collections.Generic.Dictionary<string,CSMSL.IO.MSDataFile>"

为什么简单继承时不能将ThermoRawFile隐式转换为MSDataFile

这工作得很好:

 MSDataFile dataFile = new ThermoRawFile("someFile.raw");

最佳答案

该错误并不是说它无法将 CSMSL.IO.Thermo.ThermoRawFile 转换为 CSMSL.IO.MSDataFile,只是说它无法转换基于通用字典类型的将 CSMSL.IO.Thermo.ThermoRawFile 转换为基于 CSMSL.IO.MSDataFile 的通用字典类型。这是预期的,因为这些类型不是协变的。

您可以通过提供强制转换来解决此问题:

IEnumerable<string> rawFiles;
Dictionary<string, MSDataFile> dataFiles = rawFiles.ToDictionary(
file => file,
file => (MSDataFile)new ThermoRawFile(file)
);

关于c# - 使用 LINQ IEnumerable.ToDictionary() 时无法将类隐式转换为基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18662531/

25 4 0