2016-06-29 6 views
-1

名前空間tool1にcustomTypeという名前のクラスがあります。カスタムタイプを返す関数を動的に呼び出すときにキャストエラーが発生する

私は、次のように "customType"のリストを返すルーチン1という名前の他のメソッド(名前空間tool1のclass1)を使用しています。

このコードは、エラーなしでcustomtypeのリストを返します。

List<tool1.class1.customType> result1 = new List<tool1.class1.customType>(); 
    result1 = tool1.class1.routine1(argsAsStr, p_values); 

次のコードでもエラーなしで正常に動作し、次のように、オブジェクトを返します。しかし

Assembly tool1 = Assembly.LoadFrom(@"C:\tool1\tool1\bin\Debug\tool1.dll"); 
    Type type = tool1.GetType("tool1.class1"); 
    object instance = Activator.CreateInstance(type); 
    object[] parametersArray = new object[] { argsAsStr, p_values}; 
    MethodInfo method = type.GetMethod("routine1"); 
    object result2 = method.Invoke(instance, parametersArray); 

、ときに私オブジェクトではなくリストとして結果をキャストしようとすると、キャストエラーが表示されます。

Assembly tool1 = Assembly.LoadFrom(@"C:\tool1\tool1\bin\Debug\tool1.dll"); 
    Type type = tool1.GetType("tool1.class1"); 
    object instance = Activator.CreateInstance(type); 
    object[] parametersArray = new object[] { argsAsStr, p_values}; 
    MethodInfo method = type.GetMethod("routine1"); 
    List<tool1.class1.customType> result2 = method.Invoke(instance, parametersArray) 

エラーメッセージ:

Error: Cannot implicitly convert type 'object' to 'System.Collections.Generic.List<tool1.class1.customType>'. 
An explicit conversion exists (are you missing a cast?) 

どのように私はinvokeメソッドの後にうまくいけば、リターン「ではない」オブジェクトが、「customTypeのリスト」、この鋳造エラーを克服し、できますか?ご関心と貢献のために事前に

おかげで、

Aykut

+5

あなたは、たとえば、 "tool1.class1下" で*正確に*何を意味するのですか?あなたが[mcve]を提供するなら、あなたを助けるほうが簡単でしょう。 (私はまた、.NETの命名規則に従うことを強くお勧めします) –

+0

チップのJon Skeetに感謝します。私はそれを行い、それに応じて質問を編集します。 –

答えて

0

あなたは(objectを返す)method.Invokeの結果をキャストするのを忘れ:

var result2 = (List<tool1.class1.customType>)method.Invoke(instance, parametersArray); 
+0

ご協力いただきありがとうございます。私はあなたの提案の後にこのキャスティングを試みたが、うまくいかなかった。私はもっ​​と掘り下げて詳細なエラーメッセージをあなたに提供します。あなたの助けをもう一度ありがとう。 –

-1

あなたの "方法" 戻っていますカスタムタイプの単一インスタンスは、そのタイプのリストではありません。

試してみてください。

List<tool1.class1.customType> result2 = new List<tool1.class1.customType>(); 
result2.Add(method.Invoke(instance, parametersArray)); 
+0

問題は 'MethodInfo.Invoke'が' object'を返すということです。結果を目的のタイプにキャストする必要があります。 – wablab

関連する問題