C# 设置没有泛型转换的数组 memberInfo

C# Set array memberInfo without generic cast

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)) 没有任何意义,因为它仍然是 returns object[] 并且我的自定义转换器已经将输入元素转换为正确的元素类型!!只是数组本身被包装了。有没有办法做 object array = SomeFunc(Type arrayType, object[] elements); 这样的 hack?

如何设置数组字段成功? (我希望我说清楚了: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[]