クラスのタイプのみを受け入れるメソッドからオブジェクトを動的に返します

CRS

.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....
StriplingWarrior

これは、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]

編集
0

コメントを追加

0

関連記事

分類Dev

クラスオブジェクトをタイプリテラルとしてではなく、オブジェクトのみをパラメータとして受け入れるようにメソッドを制限するにはどうすればよいですか?

分類Dev

クラスオブジェクトをタイプリテラルとしてではなく、オブジェクトのみをパラメータとして受け入れるようにメソッドを制限するにはどうすればよいですか?

分類Dev

カスタムオブジェクトタイプのリストを受け入れ、同様のプロパティにアクセスするジェネリックメソッドを作成します

分類Dev

Android kotlinメソッドは、任意のオブジェクトタイプをパラメーターとして受け入れます

分類Dev

ジェネリックパラメーターを受け入れるメソッドにRawタイプのコレクションオブジェクトが渡されると、ジェネリックIterator <E>の動作が異なる

分類Dev

1つのクラスオブジェクトまたは別のクラスオブジェクトを受け入れるメソッド

分類Dev

Javascript'Object.defineProperty 'はパラメータとしてプロトタイプオブジェクトのみを受け入れますか

分類Dev

メソッドがクラス名と名前「オブジェクト」を引数として受け入れるのはなぜですか?

分類Dev

インスタンスを受け取り、マップオブジェクトを静的として返すメソッドを作成できますか?

分類Dev

同じタイプの2つのオブジェクト、プロパティを受け入れ、値を比較するメソッドを作成する方法

分類Dev

''セッション 'の定義が含まれておらず、タイプ'オブジェクト 'の最初の引数を受け入れる拡張メソッド' 'が見つかりませんでした

分類Dev

抽象クラスから派生したオブジェクトをメソッドのパラメーターとして受け取る

分類Dev

Javaでリストを拡張して追加のメタデータを格納し、1つのタイプのオブジェクトのみを受け入れるように強制するにはどうすればよいですか?

分類Dev

角かっこで使用できるすべてのオブジェクトを受け入れる単一のC#メソッドを定義します

分類Dev

任意のクラスを受け入れてデータを返すJavaジェネリックメソッド?

分類Dev

angle / typescript httpGETメソッドがJSONオブジェクトをパラメーターとして受け入れないのはなぜですか

分類Dev

C#で[Serializable]属性を持つオブジェクトのみを受け入れるようにコンストラクターを作成します

分類Dev

クラス(オブジェクトタイプ)をポインタからメソッドに取得する方法

分類Dev

Java-Tがメソッドに渡される特定のタイプTのすべてのオブジェクトのセットを返します

分類Dev

関数から受け取ったオブジェクトのメソッドの参照を格納します

分類Dev

CrudRepository インターフェースを使用して、異なるタイプのオブジェクトを返すメソッドを自動実装する

分類Dev

Pointオブジェクトのリストを受け入れ、指定されたリストのXメンバーとYメンバーの最小値と最大値を決定するタプルを使用してメソッドを作成する

分類Dev

SaveChangesメソッドに渡されるオブジェクトのタイプを把握します

分類Dev

C ++で機能するパラメーターとして、オブジェクトタイプのセットのすべての組み合わせの可能性を受け入れます

分類Dev

さまざまなクラスのさまざまなコンストラクターを受け入れるようにするには、オブジェクトにどのタイプを宣言する必要がありますか

分類Dev

Itへのすべてのタイプのコレクションを受け入れるジェネリックメソッドPrintを作成します

分類Dev

ファクトリから返されたオブジェクトを要素のメソッドにどのようにバインドしますか?

分類Dev

SqlParameterCollectionは、null以外のパラメータタイプのオブジェクトのみを受け入れます

分類Dev

任意のデータ型のオブジェクトを含むリストをメソッドに受け入れさせる方法

Related 関連記事

  1. 1

    クラスオブジェクトをタイプリテラルとしてではなく、オブジェクトのみをパラメータとして受け入れるようにメソッドを制限するにはどうすればよいですか?

  2. 2

    クラスオブジェクトをタイプリテラルとしてではなく、オブジェクトのみをパラメータとして受け入れるようにメソッドを制限するにはどうすればよいですか?

  3. 3

    カスタムオブジェクトタイプのリストを受け入れ、同様のプロパティにアクセスするジェネリックメソッドを作成します

  4. 4

    Android kotlinメソッドは、任意のオブジェクトタイプをパラメーターとして受け入れます

  5. 5

    ジェネリックパラメーターを受け入れるメソッドにRawタイプのコレクションオブジェクトが渡されると、ジェネリックIterator <E>の動作が異なる

  6. 6

    1つのクラスオブジェクトまたは別のクラスオブジェクトを受け入れるメソッド

  7. 7

    Javascript'Object.defineProperty 'はパラメータとしてプロトタイプオブジェクトのみを受け入れますか

  8. 8

    メソッドがクラス名と名前「オブジェクト」を引数として受け入れるのはなぜですか?

  9. 9

    インスタンスを受け取り、マップオブジェクトを静的として返すメソッドを作成できますか?

  10. 10

    同じタイプの2つのオブジェクト、プロパティを受け入れ、値を比較するメソッドを作成する方法

  11. 11

    ''セッション 'の定義が含まれておらず、タイプ'オブジェクト 'の最初の引数を受け入れる拡張メソッド' 'が見つかりませんでした

  12. 12

    抽象クラスから派生したオブジェクトをメソッドのパラメーターとして受け取る

  13. 13

    Javaでリストを拡張して追加のメタデータを格納し、1つのタイプのオブジェクトのみを受け入れるように強制するにはどうすればよいですか?

  14. 14

    角かっこで使用できるすべてのオブジェクトを受け入れる単一のC#メソッドを定義します

  15. 15

    任意のクラスを受け入れてデータを返すJavaジェネリックメソッド?

  16. 16

    angle / typescript httpGETメソッドがJSONオブジェクトをパラメーターとして受け入れないのはなぜですか

  17. 17

    C#で[Serializable]属性を持つオブジェクトのみを受け入れるようにコンストラクターを作成します

  18. 18

    クラス(オブジェクトタイプ)をポインタからメソッドに取得する方法

  19. 19

    Java-Tがメソッドに渡される特定のタイプTのすべてのオブジェクトのセットを返します

  20. 20

    関数から受け取ったオブジェクトのメソッドの参照を格納します

  21. 21

    CrudRepository インターフェースを使用して、異なるタイプのオブジェクトを返すメソッドを自動実装する

  22. 22

    Pointオブジェクトのリストを受け入れ、指定されたリストのXメンバーとYメンバーの最小値と最大値を決定するタプルを使用してメソッドを作成する

  23. 23

    SaveChangesメソッドに渡されるオブジェクトのタイプを把握します

  24. 24

    C ++で機能するパラメーターとして、オブジェクトタイプのセットのすべての組み合わせの可能性を受け入れます

  25. 25

    さまざまなクラスのさまざまなコンストラクターを受け入れるようにするには、オブジェクトにどのタイプを宣言する必要がありますか

  26. 26

    Itへのすべてのタイプのコレクションを受け入れるジェネリックメソッドPrintを作成します

  27. 27

    ファクトリから返されたオブジェクトを要素のメソッドにどのようにバインドしますか?

  28. 28

    SqlParameterCollectionは、null以外のパラメータタイプのオブジェクトのみを受け入れます

  29. 29

    任意のデータ型のオブジェクトを含むリストをメソッドに受け入れさせる方法

ホットタグ

アーカイブ