目标
我有一个对象[] Source,object 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[]"
[注意:我希望能够使用整数,双数,浮点数等。否则,这个问题将非常简单]
研究
使用Var: 无法使用因为无法创建var数组
使用泛型:
这适用于
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/ *返回null引用异常,我想在this.GetType()
编辑:Meh解决方案 根据注释,无法从object []转换为string []。 但是,以下代码运行良好。
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);
答案 0 :(得分:0)
无法将一种类型的数组转换为另一种类型的数组(即object[]
到string[]
),因为它们是不同的非兼容类型。反思也无济于事。
要进行转换,您将始终需要直接创建某种类型的数组,或者通过LINQ转换函数之一创建IEnumerable<DestinationType>
。