簡體   English   中英

如何將參數傳遞給 Activator.CreateInstance<T> ()

[英]How to Pass Parameters to Activator.CreateInstance<T>()

我想創建一個我在我擁有的泛型方法中指定的類型的實例。 這種類型有許多重載的構造函數。 我希望能夠將參數傳遞給構造函數,但是

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 上傳遞參數與無參數創建相比具有顯着的性能差異。

使用預編譯的 lambda 動態創建對象有更好的選擇。 當然,性能始終是主觀的,它顯然取決於每種情況是否值得。

關於本文問題的詳細信息。

圖表取自文章,表示每 1000 次調用所花費的時間(以毫秒為單位)。

性能對比

作為 Activator.CreateInstance 的替代方案,鏈接 url 中的 FastObjectFactory 比 Activator 更好(從 .NET 4.0 開始,明顯優於 .NET 3.5。沒有使用 .NET 4.5 完成測試/統計)。 有關統計信息、信息和代碼,請參閱 StackOverflow 帖子:

如何在 Activator.CreateInstance 中傳遞 ctor args 或使用 IL?

public class AssemblyLoader<T>  where T:class
{
    public void(){
        var res = Load(@"C:\test\paquete.uno.dos.test.dll", "paquete.uno.dos.clasetest.dll") 
    }

    public T Load(string assemblyFile, string objectToInstantiate) 
    {
        var loaded = Activator.CreateInstanceFrom(assemblyFile, objectToInstantiate).Unwrap();

        return loaded as T;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM