gpt4 book ai didi

c# - 是否可以将 LINQ "Take"扩展方法的结果转换为原始类型?

转载 作者:行者123 更新时间:2023-11-30 13:25:21 25 4
gpt4 key购买 nike

如果我应用 LINQ Take SortedList<int, int> 的扩展方法,如何将结果转换为新的 SortedList<int, int>

从我得到的运行时错误来看,Take 方法的结果是 EnumerablePartition不能转换为 SortedList<int, int>

控制台 App 中的 Main 方法编译正常,但在将 list.Take(2) 的结果转换为 SortedList 时在运行时抛出错误

        static void Main(string[] args)
{
Console.WriteLine("List");

var list = new SortedList<int, int>();

list.Add(2, 10);
list.Add(8, 9);
list.Add(3, 15);

foreach (KeyValuePair<int, int> item in list){
Console.WriteLine(item.Value);
};

Console.WriteLine("Short List");

var shortlist = (SortedList<int, int>)list.Take(2);

foreach (KeyValuePair<int, int> item in shortlist)
{
Console.WriteLine(item.Value);
};

Console.Read();

}

我会预料到 Take 的结果新方法SortedList<int, int>或者至少可以转换为 SortedList<int, int>假设这是原始类型。

这是我遇到的运行时错误:

Unable to cast object of type 'EnumerablePartition`1[System.Collections.Generic.KeyValuePair`2[System.Int32,System.Int32]]' to type 'System.Collections.Generic.SortedList`2[System.Int32,System.Int32]'

编辑:

我对 LINQ 和泛型比较陌生,但由于提供了很好的答案,我创建了一个新的扩展方法以提高可读性:

    static class Extensions {

public static SortedList<TKey, TValue> ToSortedList<TKey, TValue>(this IEnumerable<KeyValuePair<TKey, TValue>> collection)
{
var dictionary = collection.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
return new SortedList<TKey, TValue>(dictionary);
}
}

现在,创建我的入围名单:

var shortlist = list.Take(2).ToSortedList();

我在想像上面这样的东西可能已经可用了!

最佳答案

I would have expected the result of the Take method to be a new SortedList or at least that it would be possible to cast to a SortedList given that this is the original type.

嗯,它并不是那样工作的。如果你Take(2)从一袋糖果中,你有两颗糖果。你不会因为原来的糖果装在一个袋子里就神奇地得到一个装有两颗糖果的新袋子。

从技术上讲,Take方法采用 IEnumerable<>任何类型并返回 IEnumerable<>同类型的。原始容器类型的信息在此过程中丢失。

很明显,就像在我们的糖果示例中一样,如果您从您的大袋子里取出两颗糖果的小袋子,没有人会阻止您重新包装它们。同样在这里。如果您需要排序列表,请根据结果创建一个新的排序列表。但这是手动的。

关于c# - 是否可以将 LINQ "Take"扩展方法的结果转换为原始类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55744908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com