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(

C#设置不带泛型强制转换的数组memberInfo

哦,我想我想通了!以下是解决方案:

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[](

创建