我得到
的例外无法将类型'long []'隐式转换为'System.Collections.Generic.IEnumerable< long?>'
如何解决此问题?
我试过这个但是没有用。
AssignedPlayerSites是一个IList属性。
IEnumerable<long?> multipleSelectedSites = cmsUser.AssignedPlayerSites.Select(ps => ps.Id).AsEnumerable<long?>();
答案 0 :(得分:5)
问题是您无法以这种方式从IEnumerable<long>
转换为IEnumerable<long?>
。您可以使用Enumerable.Cast
扩展方法执行此操作,例如:
var longArray = new long[] { 1, 2, 3 };
IEnumerable<long?> nullableLongEnumerable = longArray.Cast<long?>();
IEnumerable<long?> multipleSelectedSites =
cmsUser.AssignedPlayerSites.Select(ps => ps.Id).Cast<long?>();
但是,根据您使用它做的事情,这可能更有意义:
IEnumerable<long> multipleSelectedSites = cmsUser.AssignedPlayerSites.Select(ps => ps.Id);
答案 1 :(得分:0)
我不知道为什么您需要将long[]
转换为IEnumarable<long?>
而不是在开头创建long?[]
。如果它已经long?[]
但是如果long[]
是您无法修改的方法的返回类型,则可以使用Enumerable.Cast
方法进行转换:
IEnumerable<long?> multipleSelectedSites = cmsUser.AssignedPlayerSites.Cast<long?>();
答案 2 :(得分:0)
你可以尝试这样的事情。
long[] items = new long[] { 1, 2, 3 };
IEnumerable<long?> castedItems = items.Select<long, long?>(x =>
{
if (object.Equals(x, null))
return null;
else
return x;
});
它做的是我选择集合中的项目,评估它是否为null然后返回所需的值。
值得关注的是,由于数组中的数据类型为long
,我认为没有必要检查它是否为空,因为这种数据类型不可能。
答案 3 :(得分:0)
不需要铸造。只需替换它:
IEnumerable<long?> multipleSelectedSites = cmsUser.AssignedPlayerSites
.Select(ps => ps.Id).AsEnumerable<long?>();
用这个:
IEnumerable<long?> multipleSelectedSites = cmsUser.AssignedPlayerSites
.Select(ps => new long?(ps.Id)).AsEnumerable();