如何将Long []转换为IEnumerable <long?> </long?>

时间:2015-01-20 02:06:05

标签: c#

我得到

的例外
  

无法将类型'long []'隐式转换为'System.Collections.Generic.IEnumerable&lt; long?&gt;'

如何解决此问题?

我试过这个但是没有用。

AssignedPlayerSites是一个IList属性。

IEnumerable<long?> multipleSelectedSites = cmsUser.AssignedPlayerSites.Select(ps => ps.Id).AsEnumerable<long?>();

4 个答案:

答案 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();