質問

次のようなコードがあります:

    public static T CreateSomething<T>(SomeType a) where T : SomeMicrosoftBaseClass, new()
    {
        var newElement = new T { SomeProperty = a};
        DoStuff();
        return newElement;
    }

そして今、SomeMicrosoftBaseClassのコンストラクターにブール引数を渡すことができるようにコードを変更する必要があります-これは構築時にのみ設定できます。

&quot; new()&quot;制約にはパブリックなパラメータなしのコンストラクタが必要です。インターフェイスを使用したり、SomeMicrosoftBaseClassを変更したりすることができなかったため、次のようなリフレクションを使用しています。

var newElement = (T) (typeof (T).GetConstructor(new Type[] { typeof(SomeType) }).Invoke(new object[] { a }));

これを行うためのよりエレガントな方法を提案できる人はいますか?

役に立ちましたか?

解決

Activator.CreateInstance を使用できます:

var newElement = (T)Activator.CreateInstance(typeof(T),a);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top