private void MyMethod(object myObject)
{
if(myObject is IEnumerable)
{
List
但我总是得到以下例外:
无法转换类型为'System.Collections.Generic.List 1[MySpecificType]' to type 'System.Collections.Generic.List1 [System.Object]'的对象
我真的需要这个工作,因为这个方法需要非常通用才能接收单个对象和两个未指定类型的集合.
这是可能的,还是有另一种方法来实现这一点.
谢谢.
1> erikkallen..:
C#4将具有协变和逆变模板参数,但在此之前你必须做一些非泛型的事情
IList collection = (IList)myObject;
2> andleer..:
您不能将IEnumerable 转换为List .
但您可以使用LINQ完成此任务:
var result = ((IEnumerable)myObject).Cast().ToList();
这也是创建一个新列表,而不是铸造原始列表.
3> Chris Holmes..:
问题是,你正试图向上转向更丰富的对象.您只需将项目添加到新列表:
if (myObject is IEnumerable)
{
List list = new List();
var enumerator = ((IEnumerable) myObject).GetEnumerator();
while (enumerator.MoveNext())
{
list.Add(enumerator.Current);
}
}