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