質問

目標

オブジェクト[]ソース、オブジェクトターゲット、およびfieldInfo var(var.fieldType.isArrayがtrue)。 var.setvalue(ターゲット、ソース)を実行したいです。 ただし、「オブジェクト[] " - >" anothertype [] "

を変換することはできません。

サンプルラン

object[]Source=new object[2]{"Hello","World"};
Var.SetValue(Target,Source); //Cannot Convert "object[]"->"string[]"
.

[注:INTS、Double、Floatsなどを使用できるようにしたいのですが、この問題は自然に簡単になるでしょう]

研究

var:を使用 var配列を作成できないために使用できません

使用一般的なもの:

これは

に働く
myField.SetValue(target,GenericCastArray<string>(source));
.

しかし、

では機能しません
Type someType=typeof(string); //or int, or float
 (myfield.SetValue(target,GenericCastArray< someType > (source))
.

* http://社会。 msdn.microsoft.com/forums/en-us/csharplanguage/thread/fe14d396- bc35-4f98-851d-ce3c8663cd79/ * NULL参照例外を返し、this.getType()

編集:Meh Solution コメントに基づいて、オブジェクト[]から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); 
.

役に立ちましたか?

解決

これらのタイプの配列を別のタイプの配列にキャストすることはできません(つまり、object[]からstring[]へ)は、異なる非互換型です。反射はどちらかをキャストするのに役立ちません。

変換するには、常に直接またはLINQ変換関数の1つを介してIEnumerable<DestinationType>を作成することによって、常に配列のコピーを作成する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top