我在类里面使用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/

10-16 09:56