我正在使用C#4.0,并且在反射和转换方面存在问题。我已经阅读了StackOverflow上的一些线程,到目前为止,我没有尝试过提供适合我的解决方案。
问题:我有一个Character类,它是从另一个类GenericDataObjectWithUniqueID派生的。我有一个字符列表(例如,键入List),我想通过反射将它们显示为
List<GenericDataObjectWithUniqueID>.
到目前为止,我使用以下内容:
(IList)p.GetValue(context, null);
这将使我得到有问题的列表,没问题,但是作为IList。正如我所说,我想要的是List。
所以我尝试了这个:
(List<GenericDataObjectWithUniqueID>)p.GetValue(context, null);
现在,出于测试目的,我知道该列表是Characters(列表(字符)),而Character是从GenericDataObjectWithUniqueID派生的。
当我在上面的行中运行时,我得到以下信息:
无法转换类型为'System.Collections.Generic.List 1[GameSystem.DataModel.Character]' to type 'System.Collections.Generic.List
1 [WPF_MVVM_GenericBaseDLL.Data_Objects.GenericDataObjectWithUniqueID]'的对象。
我已经疯了,因为我检查了大约十次。字符来自GenericDataObjectWithUniqueID。
我也尝试过:
IList propertyList = (IList)p.GetValue(context, null);
List<GenericDataObjectWithUniqueID> newList = new List<GenericDataObjectWithUniqueID>(propertyList);
这告诉我“参数1:无法从'System.Collections.IList'转换为'System.Collections.Generic.IEnumerable'”
我也尝试过:
IList propertyList = (IList)p.GetValue(context, null);
List<GenericDataObjectWithUniqueID> newList = propertyList as List<GenericDataObjectWithUniqueID>;
我在这里没有收到错误,但是'newList'为空。
这些是this thread的建议,但到目前为止还没有运气。
我希望我只是缺少一些简单的东西。而且请,不,我不能只是继续使用IList。我也尝试过,但是我还有其他代码需要使用
List<GenericDataObjectWithUniqueID>.