Ответ 1
Вам нужно будет сделать копию, но это, вероятно, хорошо. В С# 2 ваш текущий код почти самый чистый, который вы можете сделать. Это было бы улучшено путем непосредственного создания списка из ваших значений (List<MyType> list = new List<MyType>(valueCollection);
), но копия все равно будет необходима.
Используя LINQ с С# 3, вы сможете:
myDictionary.Values.ToList();
Сказав это, я бы (вероятно) не попытался избежать копирования. Возвращение копии ваших значений имеет тенденцию быть более безопасным, поскольку оно предотвращает возникновение проблем вызывающего абонента, если они пытаются изменить вашу коллекцию. Возвращая копию, вызывающий может выполнять list.Add(...)
или list.Remove(...)
, не вызывая проблем с классом.
Изменить: учитывая ваш комментарий ниже, если все, что вам нужно, это IEnumerable<T>
с графом, вы можете просто вернуть ICollection<T>
. Этот -, непосредственно реализованный ValueCollection
, что означает, что вы можете сразу вернуть значения словаря без копирования:
private ICollection<MyType> ConvertToList(Dictionary<int, MyType>.ValueCollection valueCollection)
{
return valueCollection;
}
(Конечно, этот метод становится бесполезным в этом случае - но я хотел продемонстрировать его для вас...)