You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#初始化IEnumerable报错:无法隐式转换类型,如何修复?

如何修复「Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<>' to 'System.Collections.Generic.IEnumerable<KeyValuePair<Guid, String>>'」错误?

这个错误的根源很直白:你通过Select生成的是匿名类型的集合,但变量users被声明为IEnumerable<KeyValuePair<Guid, string>>,两种类型完全不兼容,C#编译器没法帮你自动完成转换。

修复方案

你只需要在Select里明确创建KeyValuePair<Guid, string>实例,替换掉原来的匿名对象即可:

IEnumerable<KeyValuePair<Guid, String>> users;
if (Roles.IsUserInRole("Administrator")) {
    users = _systemUserCommand.LookupUsersInRole(null, query)
        .Select(s => new KeyValuePair<Guid, string>(s.SystemUserId, $"{s.FirstName} {s.LastName}"));
}

如果你的项目使用C# 7.0及以上版本,还可以用更简洁的元组转换写法(不过第一种写法兼容性更好,可读性也更强):

users = _systemUserCommand.LookupUsersInRole(null, query)
    .Select(s => (s.SystemUserId, $"{s.FirstName} {s.LastName}") as KeyValuePair<Guid, string>);

为什么原来的代码会报错?

你之前的代码里new { s.SystemUserId, Text = string.Format("{0} {1}", s.FirstName, s.LastName) }是在创建一个编译器自动生成的匿名类,它和KeyValuePair<Guid, string>是毫无关系的两种类型,编译器没有办法把匿名类实例隐式转换成KeyValuePair,所以就抛出了这个类型转换错误。

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:23:09