C#设置不带泛型强制转换的数组memberInfo
本文关键字:转换 数组 memberInfo 设置 泛型 | 更新日期: 2023-09-27 18:00:06
if(fieldInfo.FieldType.IsArray)
{
Type elementType = fieldInfo.FieldType.GetElementType();
obj[] objs = MyCustomConverter.Convert(elementType, IEnumerable<string> input);
field.SetValue(target,objs);
}
SetValue
步骤将引发异常,因为要设置的值(objs
(与特定类型不匹配。但最困难的是,我不知道数组的确切类型。我所拥有的只是非泛型。所以我不能调用类似Cast<T>
的东西(我没有通用的T
,但我有typeof(T)
(。Array.ConvertAll(objs,obj=> Convert.ChangeType(obj, elementType))
没有任何意义,因为它仍然返回object[]
,并且我的自定义转换器已经将输入元素转换为正确的元素类型!!只是数组本身被封装了。有没有像object array = SomeFunc(Type arrayType, object[] elements);
这样的破解方法?
如何成功设置数组字段?(我希望我明确表示:P(
哦,我想我想通了!以下是解决方案:
object[] array = obj[] objs = MyCustomConverter.Convert(elementType, IEnumerable<string> input);
Array wrappedArray = Array.CreateInstance(elementType, array.Length);
array.CopyTo(wrappedArray, 0);
field.SetValue(target,wrappedArray);
只是我不知道一个数组可以由Array.CreateInstance
而不是T[]
(如int[]
(