尝试使用 LINQ 创建字典时出现转换错误

Posted

技术标签:

【中文标题】尝试使用 LINQ 创建字典时出现转换错误【英文标题】:Conversion Error when trying to create dictionary with LINQ 【发布时间】:2021-08-22 10:39:54 【问题描述】:

我正在用 C# 编写程序,但遇到了问题。

this.ProcessCache = new Dictionary<ProcessCacheEntry, Process>(Process.GetProcesses().Select(p => new KeyValuePair<ProcessCacheEntry, Process>(new ProcessCacheEntry(p), p)));

这是我得到的错误:

错误 CS1503 参数 1:无法从 'System.Collections.Generic.IEnumerable>' 转换为 'int'

this.ProcessCacheDictionary&lt;ProcessCacheEntry, Process&gt; 不是 int!

【问题讨论】:

给你的小提示:你可以把所有的代码放在一行中,并不意味着你应该,阅读起来很糟糕 我会使用ToDictionary 方法,它应该更短。 Dictionary 有八个构造函数。其中一个要求您传递一个 int 类型的变量,称为“容量”。因为您在 Dictionary 的构造函数中输入的参数与八个构造函数中的任何一个都不匹配,所以编译器猜测您正在使用带 int 的那个,它给您一个编译错误,因为您没有传递一个 int。 【参考方案1】:

您应该使用 ToDictionary 而不是新的 KeyValue 构造函数

如何初始化:

var allProcess = Process.GetProcesses();
var yourDictionary = allProcess.ToDictionary(ToProcessCacheEntry);

ToProcessCacheEntry 方法:

private ProcessCacheEntry ToProcessCacheEntry(Process process)

    return new ProcessCacheEntry(process);

【讨论】:

您已经编辑了您的答案,直到它不再起作用。另外,你的静态方法是无用的。 @Steeeve 编辑前的答案将第二个参数添加到 ToDictionary,这是没用的。关于静态函数,它是静态的事实是无用的(只是在一个新项目上尝试了该代码,我将编辑),关于创建的分离,我喜欢这样,所以代码会更具可读性,所以我认为它看起来更好,除此之外,这是您可以对事物进行单元测试的另一个地方 ToDictionary 扩展方法没有重载,它接受单个 Func。所以它根本行不通。 @Steeeve 是的,有docs.microsoft.com/en-us/dotnet/api/… 你是对的。我曾期望像 process-id 这样的键,而不是 ProcessCacheEntry 对象。但是再读一遍这个问题,是的,它给出了请求的字典。

以上是关于尝试使用 LINQ 创建字典时出现转换错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试创建计划任务时出现Powershell错误?无法处理参数“参数”的参数转换

尝试从 Pandas DataFrame 中的字典访问第一个值时出现浮点错误

Python json.load JSONDecodeError:尝试加载多个 json 字典时出现额外数据错误

尝试在视图中使用模型时出现 MVC 错误

尝试从一系列字典中检索键时出现“类型错误:列表索引必须是整数或切片,而不是 str”

为啥在尝试使用 python PIL 将 WMF 转换为 PNG 时出现渲染错误?