Цель
У меня есть объект []Source, объект Target и FieldInfo Var (Var.FieldType.IsArray имеет значение true). Я хочу запустить Var.SetValue(Target,Source). Однако я не могу преобразовать "object[]" -> "anotherType[]"
Пробный запуск
object[]Source=new object[2]{"Hello","World"};
Var.SetValue(Target,Source); //Cannot Convert "object[]"->"string[]"
[примечание: я хочу иметь возможность использовать целые числа, двойные числа, числа с плавающей запятой и т. д. В противном случае эта проблема была бы тривиально простой]
Исследования
Использовать переменную: нельзя использовать, так как нельзя создавать массивы переменных.
Использовать обобщения:
Это работает для
myField.SetValue(target,GenericCastArray<string>(source));
Однако он не работает для
Type someType=typeof(string); //or int, or float
(myfield.SetValue(target,GenericCastArray< someType > (source))
* http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/fe14d396-bc35-4f98-851d-ce3c8663cd79/* возвращает исключение нулевой ссылки, я думаю, в this.GetType()
EDIT: Meh Solution Судя по комментариям, невозможно преобразовать объект[] в строку[]. Однако следующий код работает достаточно хорошо.
object[]Source=null;
Type basetype=Var.FieldType.GetElementType();
int l=somelength;
if (basetype.IsEquivalentTo(typeof(string))) Source = new string[l];
//repeat for all types
source=//run your Reflection here
var.SetValue(target,source);
someType
). - person Jeff Mercado   schedule 28.07.2012SetValue()
? Вы можете использовать отражение здесь, но это совершенно другой зверь. - person Jeff Mercado   schedule 28.07.2012