2016-05-23 15 views
0

私は動的にユーザー入力ドキュメントに基づいてセットオブジェクトを構築しようとしています。何らかの理由でSetValueがthrowされているにもかかわらず、Objectはターゲットタイプと一致しません。オブジェクトは、タイプを使用してSetValueでターゲットタイプと一致しません

達成しようとしているのは何ですか?

private void MapProp(string prop, string invalue) 
    { 
      var currType = _userAssembly.GetType(_className); 

      var property = currType.GetProperty(prop, BindingFlags.Public | BindingFlags.Instance); 
      var value = Convert.ChangeType(invalue, property.PropertyType); 

      property.SetValue(styleType, value, null); 
     } 
    } 

は現在、その言ったオブジェクトにマップしようとする:

public class TestObject: ITestObj 
{ 
public string PropertyA {get;set;} 
public string PropertyB {get;set;} 
} 

呼び出すコード

MapProp("PropertyA", "testValue"); 

とのgetTypeクラス名= .Assembly.TestObject

+0

あなたがターゲット・タイプについては何も、またソースの種類が含まれていない見せているコード。あなたが含まれているものに基づいてあなたを助けることはできません。 – krillgar

+0

詳細情報を更新しました。ありがとうございます。 – user4550364

答えて

0

user4550364 @、私はいけませんあなたの_userアセンブリが何をしているかを知っているので、私はサンプルコードを載せるつもりです。これは広告に役立つでしょうアイデアをあなたのコードに適用してください。これはまた、レイトバインドの例です。

クラスファイル

public class TestObject: ITestObj 
{ 
public string PropertyA {get;set;} 
public string PropertyB {get;set;} 
void Print(string PropertyA,string PropertyB) 
    { 
//Assuming that interface ITestObj has this method definition and hence implementing here. 
    } 
} 

メインコード

using System.Reflection; 

static void Main(string[] args) 
     { 
      Assembly executingassembly = Assembly.GetExecutingAssembly(); 

      Type TestObjecttype = executingassembly.GetType("ur_namespace.TestObject"); 

      object instance = Activator.CreateInstance(TestObjecttype); 

      string[] parameters = new string[2]; 
      parameters[0] = "PropertyA "; 
      parameters[1] = "PropertyB "; 
      //To get properties 
      PropertyInfo[] properties = TestObjecttype .GetProperties(); 
      foreach (PropertyInfo property in properties) 
       { 
      Console.WriteLine(property.PropertyType.Name+" "+property.Name); 
       } 
      MethodInfo method = customertype.GetMethod("Print"); 
      //Object created ,now invoke using its instance 
      string printMethodInvoked= (string)method.Invoke(instance, parameters); 
      Console.WriteLine(printMethodInvoked); 
      Console.Read(); 
     } 
    } 
関連する問題