私が持っているジェネリックメソッドで指定する型のインスタンスを作成したい。この型には、オーバーロードされたコンストラクタがいくつかあります。私はコンストラクタに引数を渡すことができるようにしたいが、
Activator.CreateInstance<T>()
これをオプションとしては見ていません。
別の方法がありますか?
(T)Activator.CreateInstance(typeof(T), param1, param2);
名前付きパラメーターを介して引数をCreateInstanceに渡す別の方法があります。
それに基づいて、配列をCreateInstance
に渡すことができます。これにより、0個以上の引数を使用できます。
public T CreateInstance<T>(params object[] paramArray)
{
return (T)Activator.CreateInstance(typeof(T), args:paramArray);
}
Activator.CreateInstanceの代替として、リンクされたURLのFastObjectFactoryはActivatorよりも優れています(.NET 4.0以降、.NET 3.5よりも大幅に優れています。NET4.5でテスト/統計は行われません)。統計、情報、コードについてはStackOverflowの投稿をご覧ください:
ただし、Activator.CreateInstanceで引数を渡すと、パラメーターなしの作成と比べてパフォーマンスが大幅に異なることに注意してください。
事前にコンパイルされたラムダを使用してオブジェクトを動的に作成するためのより良い代替手段があります。もちろん、パフォーマンスは常に主観的であり、それが価値があるかどうかは明らかに各ケースに依存します。
グラフは記事から取られており、1000コールあたりのミリ秒単位での所要時間を表しています。