argsでwhere句+新しい制約を使用していますか?
-
22-07-2019 - |
質問
次のようなコードがあります:
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);
所属していません StackOverflow