首頁 >後端開發 >C++ >如何在 C# 中使用建構函式建立泛型類型的實例?

如何在 C# 中使用建構函式建立泛型類型的實例?

Patricia Arquette
Patricia Arquette原創
2025-01-22 13:42:111010瀏覽

How Can I Create Instances of Generic Types with Constructors in C#?

在C#中使用建構子建立泛型類型的實例

在C#中,使用建構子建立泛型類型的新物件可能是一個挑戰。考慮以下場景:

<code class="language-csharp">// 创建类型为T的对象列表
public static string GetAllItems<T>() where T : new()
{
    ...
    List<T> tabListItems = new List<T>();

    // 尝试使用构造函数参数向列表添加对象
    foreach (ListItem listItem in listCollection) 
    {
        tabListItems.Add(new T(listItem)); // 错误!
    }
    ...
}</code>

嘗試編譯此程式碼時,可能會遇到編譯器錯誤,指出在建立變數T的實例時無法提供參數。這是因為new()約束僅允許建立沒有參數的物件。

解:使用函數

為了克服此限制,您可以提供一個參數,該參數允許基於參數建立物件。一個方便的解決方案是使用函數:

<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> del)
{
    ...
    List<T> tabListItems = new List<T>();

    // 使用提供的函数向列表添加对象
    foreach (ListItem listItem in listCollection) 
    {
        tabListItems.Add(del(listItem));
    }
    ...
}</code>

呼叫函數

要使用此函數,您可以如下呼叫它:

<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l));</code>

這種方法可讓您建立具有建構函數的泛型類型的新對象,即使在泛型函數中也是如此。

以上是如何在 C# 中使用建構函式建立泛型類型的實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn