【发布时间】:2014-04-19 03:39:16
【问题描述】:
好的,我知道这是不可能的,但我想知道是否有人知道解决这个问题的方法。
List<int> numberList = new List<int>();
List<object> objectList = (List<object>)numberList;
这会产生以下错误:
无法将类型“System.Collections.Generic.List{int}”转换为“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 提供的 cmets),一旦我引入了诸如 EnumerableQuery 之类的实现类,它就会失败。
【问题讨论】:
-
如果不可能,是什么让你认为我们可以做到;)
-
好吧,作为开发人员和问题解决者,我们通常不接受“否”作为答案。我们正在寻找解决问题的新方法,这就是我的问题。
-
我知道,很明显你没有看到我微笑中的眨眼。我计划在限制重置后立即投票,我认为这是一个非常有趣的问题!