Дано:
public struct Id
{
readonly int m_id;
public Id(int id)
{ m_id = id; }
public static implicit operator int(Id id)
{ return id.m_id; }
public static implicit operator Id(int id)
{ return new Id(id); }
}
Можете ли вы неявно конвертировать
IEnumerable<int>
до
IEnumerable<Id>
и наоборот. Каким-то образом. Обратите внимание, что
var ids = new int[]{ 1, 2 };
ids.Cast<Id>();
не работает, и ковариация в этом случае также не работает. Конечно, выбор будет работать, т. Е .:
ids.Select(id => new Id(id));
Но я ищу что-то, что сделало бы эту работу неявно, поэтому пишу:
IEnumerable<Id> ids = new int[]{ 1, 2 };
И да, я знаю, это можно записать как:
IEnumerable<Id> ids = new Id[]{ 1, 2 };
Но проблема в случаях, когда перечислимые целые числа происходят из другого источника, например, из файла.
Извините, если для этого уже есть ответ, но я не смог его найти.