У меня есть функция со следующей подписью:Passing производный тип в выводимый параметр
IEnumerable<TypeA> GetItems(string s, out IEnumerable<TypeB> otherItems)
(Для записи, TypeA
и TypeB
не связаны между собой типы, мой вопрос не вовлекает их, кроме как заполнители).
В коде, где я называю эту функцию, я хотел бы поместить возвращаемое значение и значение out
параметра в List
поля моего класса, как я хочу, чтобы убедиться, что они перечислены и я выполняю List-конкретные операции в ближайшее время после.
Рассмотрим:
private List<TypeA> _fieldA;
private List<TypeB> _fieldB;
// ... other code
// conversion errors for _fieldA and _fieldB:
_fieldA = Fns.GetItems(str, out _fieldB);
// _fieldA is now ok, but not _fieldB:
_fieldA = Fns.GetItems(str, out _fieldB).ToList();
// Same result as previous, out param must be a variable.
_fieldA = Fns.GetItems(str, out _fieldB.AsEnumerable()).ToList();
// This works but makes me sad:
IEnumerable<TypeB> tempEnumerable;
_fieldA = Fns.GetItems(str, out tempEnumerable).ToList();
_fieldB = tempEnumerable.ToList();
В принципе, это то, что четвертая попытка лучший способ получить то, что мне нужно, или там «лучше» способ получить списки из этой функции (короткие модификации функции, что невозможно)?
Вы имеете в виду 4-ю попытку? Если да, да, это все, что есть. Вы не можете передать поле непосредственно в метод, так как это неправильный тип. Аргументы параметра 'out' и' ref' должны быть точно того же типа, что и параметр. –
Есть ли причина, по которой вы не можете определить '_fieldA' и' _fieldB' как 'IEnumerable <>' вместо 'List <>'? – juharr
Er, четвертый да. Я довольно хорошо рассчитываю на двоих, все еще работаю над остальными. – helrich