我在另一个问题中找到了类似的内容,但由于我对C#还很陌生,所以无法解决我的问题。
我有如下代码:
System.Type type; // for example int[]
System.Type elementType = type.GetElementType(); //for example int
我需要将一个列表强制转换为int[]类型
object valueObj; //is my List<object> i want to cast to int[]
我正在尝试以下操作:
MethodInfo castMethod = typeof(Enumerable).GetMethod("Cast")
.MakeGenericMethod( new System.Type[]{ elementType } );
MethodInfo toArrayMethod = typeof(Enumerable).GetMethod("ToArray")
.MakeGenericMethod( new System.Type[]{ elementType } );
var castedObjectEnum = castMethod.Invoke(null, new object[] { valueObj });
var castedObject = toArrayMethod.Invoke(null, new object[] { castedObjectEnum });
在最后一行,我遇到了这个运行时异常:
InvalidCastException: 无法将源类型转换为目标类型。 System.Linq.Enumerable+c__Iterator0
1[System.Int32].MoveNext ()
System.Collections.Generic.List
1[System.Int32].AddEnumerable (IEnumerable`1 enumerable)最后,我需要使用以下方式将castObject赋值给privateField:
field.SetValue(this, castedObject);
编辑:
我会尝试获取更多信息,但为了更好地解释我的目的,我将解释使用情况。
我将一些类字段序列化到磁盘中的json文件中,然后当我反序列化时,我会得到一个List,其中我会序列化一个基本的int/bools/string数组。
我通过使用自定义属性标记字段来进行序列化和反序列化,并且我希望能够序列化任何基本类型的Array和List。
我会再次检查并提供更多信息。