gpt4 book ai didi

c# - 将 Dictionary.ValueCollection 转换为 IList

转载 作者:可可西里 更新时间:2023-11-01 03:06:18 30 4
gpt4 key购买 nike

我正在使用 Dictionary<int, MyType>在一个类(class)。该类实现了一个需要 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(...)而不会引起你的类问题。


编辑:鉴于您在下面的评论,如果您想要的只是一个 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/

30 4 0