首頁 > 後端開發 > C++ > 如何在 C# 泛型方法中動態指定泛型型別參數?

如何在 C# 泛型方法中動態指定泛型型別參數?

Mary-Kate Olsen
發布: 2025-01-17 20:27:10
原創
650 人瀏覽過

How Can I Dynamically Specify Generic Type Arguments in C# Generic Methods?

C#泛型方法:靈活運用可變型別參數

在C#中使用泛型方法,例如DoesEntityExist<T>(其中T代表符合IGloballyIdentifiable介面的類型),如果嘗試使用變數類型動態指定泛型類型參數(例如Type t = entity.GetType();),可能會遇到編譯時錯誤。這是因為C#泛型要求類型資訊在編譯時已知。

利用反射機制

為了克服這個限制,可以使用反射機制。此技術涉及在與泛型方法關聯的MethodInfo物件上呼叫GetMethod和MakeGenericMethod方法。這允許您動態提供類型參數,即使它只在運行時已知。

<code class="language-csharp">MethodInfo method = GetType().GetMethod("DoesEntityExist")
                             .MakeGenericMethod(new Type[] { t });
method.Invoke(this, new object[] { entityGuid, transaction });</code>
登入後複製

提升方法泛型性

另一種方法是修改呼叫方法本身使其成為泛型方法,從而允許您將所需的類型參數作為參數傳遞。這將類型選擇的決定提升到更高的層次,簡化後續方法呼叫。

補充說明

為了提供更具體的指導,最好提供更多關於問題的上下文資訊。有時,使用反射可能是必要的,但策略性地規劃泛型類型的使用可以最大限度地減少對它的重複使用。透過仔細選擇反射的時機,您可以確保類型參數只動態指定一次,允許下游程式碼無縫地使用它們。

以上是如何在 C# 泛型方法中動態指定泛型型別參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板