首頁 > 後端開發 > C++ > 如何在 C# 中使用變數的型別作為泛型參數?

如何在 C# 中使用變數的型別作為泛型參數?

Linda Hamilton
發布: 2025-01-17 20:47:10
原創
804 人瀏覽過

How Can I Use a Variable's Type as a Generic Parameter in C#?

在C#中使用變數型別作為泛型參數

C#中的泛型提供了編譯時型別安全,要求型別在編譯時已知。

假設你定義了一個泛型方法:

<code class="language-csharp">bool DoesEntityExist<T>(Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;</code>
登入後複製

當你嘗試動態使用它時,會遇到編譯錯誤:

<code class="language-csharp">Type t = entity.GetType();
DoesEntityExist<t>(entityGuid, transaction);</code>
登入後複製

這是因為t只在執行時已知,這違反了泛型的編譯時型別安全原則。

你可以使用反射來處理動態型別的泛型方法:

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

然而,這種方法由於其複雜性和性能開銷而並非理想之選。

更好的解決方案是將你的呼叫方法設為泛型,並將型別參數作為型別參數傳遞:

<code class="language-csharp">void MyMethod<T>(T entity, Guid guid, ITransaction transaction)
{
    DoesEntityExist<T>(guid, transaction);
}</code>
登入後複製

這樣,你就可以在呼叫MyMethod時動態指定類型,在保持型別安全的同時避免使用反射。

以上是如何在 C# 中使用變數的型別作為泛型參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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