我在类里面使用Dictionary<int, MyType>
。该类实现了一个需要返回IList<MyType>
的接口(interface)。有没有一种简单的方法可以将一个对象转换到另一个对象(无需复制整个内容)?
我当前的解决方案如下:
private IList<MyType> ConvertToList(Dictionary<int, MyType>.ValueCollection valueCollection)
{
List<MyType> list = new List<MyType>();
list.AddRange(valueCollection);
return list;
}
最佳答案
您需要进行复制,但这可能是一件好事。在C#2中,您当前的代码几乎是最干净的代码。通过直接根据值(List<MyType> list = new List<MyType>(valueCollection);
)构造列表来改进此方法,但是仍然需要一个副本。
但是,将LINQ与C#3结合使用,您将能够执行以下操作:
myDictionary.Values.ToList();
话虽这么说,我不会(可能)尝试避免复制。返回值的副本通常更安全,因为这样做可以防止调用方尝试修改您的集合时引起问题。通过返回副本,调用者可以执行
list.Add(...)
或list.Remove(...)
,而不会引起类问题。编辑:鉴于您在下面的评论,如果您想要的只是一个带有Count的
IEnumerable<T>
,则只需返回ICollection<T>
即可。此由ValueCollection
直接实现,这意味着您可以直接返回字典的值,而无需复制:private ICollection<MyType> ConvertToList(Dictionary<int, MyType>.ValueCollection valueCollection)
{
return valueCollection;
}
(当然,在这种情况下,此方法实际上变得毫无用处-但我想为您演示...)
关于c# - 将Dictionary <MyType> .ValueCollection转换为IList <MyType>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2540555/