gpt4 book ai didi

c# - 向上转型泛型

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

好吧,我知道这是不可能的,但我想知道是否有人知道解决这个问题的方法。

List<int> numberList = new List<int>();

List<object> objectList = (List<object>)numberList;

这会产生以下错误:

Cannot convert type 'System.Collections.Generic.List{int}' to 'System.Collections.Generic.List{object}'

这是一个简单的例子,但这是我真正的问题。我有一个动态生成 IQueryable{IGrouping{TKey, TElement}} 实例的方法。但是,由于在我的例子中 TKey 是动态生成的,所以我只能将 IQueryable 返回给调用者。

我希望能够将 IQueryable{IGrouping{dynamic, TElement}} 返回给调用者。但是,编译器会提示,因为就像在我的第一个示例中一样,它将 TKey 转换为对象(对于 dynamic),并且不允许我那样转换它。有什么解决办法吗?

更新:

这是我要解决的问题的一个更接近的例子:

List<int> testList = new List<int>();

var qry = new EnumerableQuery<int>( testList );

var objectQry = (IQueryable<object>)qry;

虽然此示例不会产生编译时错误,但在您尝试运行它时确实会产生强制转换异常。出于某种原因,即使 IQuerable 是协变的(感谢 Servy 对此的评论),一旦我引入一个实现类,例如 EnumerableQuery,它就会失败。

最佳答案

试试这个。

List<int> numberList = new List<int>();
List<object> objectList = numberList.Cast<object>().ToList();

Enumerable.Cast<T>

Casts the elements of an IEnumerable to the specified type.

关于c# - 向上转型泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23145117/

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