【发布时间】:2021-03-06 00:06:27
【问题描述】:
List<SomeClass> classObject = new List<SomeClass>();
someClass = .....
classObject.Add(someClass);
// For some reason we need to cast this List to List<object>.
List<object> objectList = classObject.Cast<object>().ToList();
// The receiving end will try then cast the item using the items in the objectList
var newInstance = Assembly.GetExecutingAssembly().CreateInstance(objectList[index].GetType().FullName);
除了列表为空之外的所有工作,接收端无法在不知道预期实例的全名的情况下投射新实例。
在没有传递 someClass 的类型的情况下,它周围有没有?
我尝试过 GetGenericArguments 但失败了,因为它返回了我们无法使用的 System.Object。
【问题讨论】:
-
在尝试访问其项目之前没有检查列表是否为空?
-
我会猜测并说“不”,没有办法。您的列表是
object类型之一,如果不包含someClass的实例,则可能包含或多或少的任何内容。编译器应该如何知道您打算使用什么类型,或者曾经保存在您的列表中? -
@ChetanRanpariya 上面的示例是在他们检查另一个扩展类执行的列表是否不为空之后。我们在这里试图解决的问题是找到一种方法来获取列表中没有对象的对象类型。我们确实知道列表中只有一种类型的对象。
-
@GeorgeKerwood 嗨,Geroge,我们也这么认为,因为它已经是一个基础对象并且没有解决方法。猜猜在这种情况下我们也必须传递类型,但这确实需要大量重构。我们有一个扩展类,可以将类转换为数据表、列表、xml、模型等。除了这个列表问题之外,所有部分都可以正常工作,因为我们无法使用空列表构建正确的数据表。 :(
-
如果列表为空,尝试从列表中的一个现有项目创建对象的目的是什么?当您尝试通过执行
objectList[index]来访问空列表中的项目时,您没有遇到异常吗?