.NET Framework 3.5に取り組んでいます。C#でメソッドを作成する必要があります。このメソッドは、5種類のクラスのいずれかを受け入れ、メソッドに渡すクラスタイプを使用して動的にオブジェクトを生成できます。したがって、基本的にこのメソッドには2つの入力があります。1つはクラスのタイプで、もう1つはオブジェクトに入力する必要のあるデータオブジェクトです。メソッドが呼び出されると、送信したクラスのタイプのオブジェクトが自動的に作成され、送信したデータオブジェクトがフィールドに入力されます。System.reflectionのcreateinstanceを使用してみて、目的のクラスのオブジェクトを取得しましたが、フィールドにデータオブジェクトを入力する必要があることに気づきました。どんな助けでも大歓迎です。
Edit : `public class DataInput
{
public string field1 { get; set; }
public string field2 { get; set; }
public string field3 { get; set; }
public string field4 { get; set; }
public DateTime field5 { get; set; }
public DateTime field6 { get; set; }
}
My 5 classes look like this :
public class Class1
{
public string field1;
public string field2;
public string field3;
public string field4;
public DateTime field5;
}
public class Class2
{
public string field1;
public string field2;
public string field3;
}
public class Class3
{
public int field1;
public string field2;
public string field3;
}
public class Class4
{
public int field1;
public string field2;
public string field3;
public DateTime field4;
}
public class Class5
{
public int field1;
public DateTime field2;
public string field3;
}
public void Convert(DataInput ratCommon, Type type1)
{
var type = Type.GetType(type1.AssemblyQualifiedName.ToString());
if (type != null)
{
Object obj = Activator.CreateInstance(type); //This creates an instance with type I passed, but I am struck here
}
}
I combined @Fabjan answer and @striplingwarrior answer and got the result. I can't thank you enough....
これは、AutoMapperの良いユースケースのように見えます。
クラス間のマッピングを初期化することから始めます。
Mapper.Initialize(cfg => {
cfg.CreateMap<DataInput, Class1>();
cfg.CreateMap<DataInput, Class2>();
// etc.
});
注:フィールドのタイプが常に一致するとは限らないように見えるため、プロジェクションなどのカスタムマッピングを作成する必要がある場合があります。
次に、Mapper.Mapメソッドを活用できます。
public object Convert(DataInput ratCommon, Type type1) => Mapper.Map(foo, typeof(DataInput), type1);
または、type1
コンパイル時に既知の場合は、ジェネリックスを介して型の安全性を得ることができます。
public T Convert<T>(DataInput ratCommon) => Mapper.Map<T>(foo);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加