2015-01-20 5 views
0

Я получаю исключениеКак я могу преобразовать Long [], чтобы IEnumerable <long?>

Не может неявно преобразовать тип 'длинный []' на 'System.Collections.Generic.IEnumerable < долго?>'

Как решить эту проблему?

Я пробовал это, но не работает.

AssignedPlayerSites - это свойство IList.

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

.AsEnumerable()? –

+0

Просто любопытно использование nullable. Если идентификатор не совпадает, коллекция должна быть пустой. – Eric

ответ

3

Проблема заключается в том, что вы не можете конвертировать из 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); 
0

Я не знаю, почему вам нужно преобразовать long[] в IEnumarable<long?> вместо создания long?[] в начале. Она будет работать нормально без конвертации, если это уже long?[]

Но в случае long[] тип возврата метода, который вы не можете изменить, вы можете использовать Enumerable.Cast метод, чтобы преобразовать его:

IEnumerable<long?> multipleSelectedSites = cmsUser.AssignedPlayerSites.Cast<long?>(); 
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; 
           }); 

Что это такое, я выбираю элемент в коллекции, оцениваю, является ли он нулевым, а затем возвращает требуемое значение.

1 пункт беспокойства, хотя, поскольку ваш тип данных в массиве равен long, я не вижу смысла проверять, является ли оно нулевым, поскольку это невозможно для этого типа данных.

0

Нет необходимости в литье. Просто замените это:

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

с этим:

IEnumerable<long?> multipleSelectedSites = cmsUser.AssignedPlayerSites 
             .Select(ps => new long?(ps.Id)).AsEnumerable(); 
Смежные вопросы