2017-11-09 24 views
0

Activator.CreateInstance()を使用して、動的型のフィールドを持つ配列をインスタンス化しようとしています。ランタイムはType arrayType = arrayFieldType.MakeArrayType())。動的型の配列をインスタンス化しようとしたときにRuntimeBinderExceptionが発生する(遅延バインド)

singleSet.ZaznamyObjektu = Activator.CreateInstance(arrayType, new object[] { rowCount }); 

rowCountは整数である。)私はHow do I create a C# array using Reflection and only type info?に応じて、このアプローチを選択したが、それは私にRuntimeBinderExceptionを与え続け:

は、暗黙的に型 'オブジェクト' 'はPodperneZarizeniTypeZaznamObjektu []' に変換できません。明示的な変換があります(キャストがありませんか?)

しかし、型の正確な名前を使用できない場合、キャストまたは変換を行う方法はわかりません。私はまた、Array.CreateInstance()を使用しようとしましたが、それは私に似た例外を与えていた。

は、暗黙のうちに「PodperneZarizeniTypeZaznamObjektu []」にタイプ「のSystem.Array」に変換できません。明示的な変換は(?あなたはキャストが欠落している)

+0

'singleSet.ZaznamyObjektu'の種類は何ですか? – InBetween

+0

PodperneZarizeniTypeZaznamObjektu [] –

答えて

0

存在しますが、それは私にRuntimeBinderException与え続け:

を暗黙的に型 'オブジェクト' 'はPodperneZarizeniTypeZaznamObjektu []' に変換できません。明示的な変換があります(キャストがありませんか?)

これは実行時の例外のようには見えません。コンパイル時エラーのように見えます。

コメントでは、singleSet.ZaznamyObjektuのタイプが PodperneZarizeniTypeZaznamObjektu[]であると言います。 Activator.CreateInstanceobjectを返しますが、CreateInstanceの有効な可能性があります。タイプの可能性があります。配列型のプロパティにobjectを割り当てることはできません。これは、以下のシナリオで無残に失敗すること、ノートを行い、今

singleSet.ZaznamyObjektu = (PodperneZarizeniTypeZaznamObjektu[])Activator.CreateInstance(arrayType, new object[] { rowCount }); 

  1. arrayFieldある

    あなたの問題は、あなたは、単にキャストが欠落していることのようです参照型であり、arrayFieldPodperneZarizeniTypeZaznamObjektuの間に参照変換を保持する有効な識別情報はありません。

    (Mammal[])tigers; //valid 
    (Insect[])tigers; //evidently not. 
    
  2. arrayField値型であり、その種類はPodperneZarizeniTypeZaznamObjektuのタイプではありません。暗黙的/明示的キャスト演算子があっても失敗します。配列型の分散は値型では許可されません。

    (long[])(ints); //not valid even though an implicit cast 
           //from int to long exists 
    
+0

ありがとう!私が解決しようとするほど、これは実際には不可能であることが分かっています(例えば、https://stackoverflow.com/questions/21345821/cast-with-a-type-variableやここで書いたものなど)。私の最後のチャンスは、インスタンス化されている可能なクラスごとに別々のキャストを書くことです。 –

関連する問題