Skip to content

ZH TW CSharp Generics

Codex edited this page Oct 11, 2026 · 2 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

泛型和類型限制

手冊C# · 範例UO

泛型型別或方法接收型別參數,例如 T。編譯器檢查對這些類型的呼叫。約束where描述必要的屬性:基底類型、介面、class、struct、notnull、unmanaged或可存取的建構子new()。

簡單範例 (Example.cs)

請將此範例另存為 Example.cs,並與本頁其他範例分開執行。

Example.cs:

// PROJECT-EXAMPLE
T Echo<T>(T value) => value;
System.Console.WriteLine(Echo(7));
System.Console.WriteLine(Echo("ore"));

結果:

7
ore
T FirstOrFallback<T>(IReadOnlyList<T> values, T fallback)
{
    return values.Count > 0 ? values[0] : fallback;
}

int first = FirstOrFallback(new[] { 10, 20 }, 0);
UO.Print(first.ToString());
sealed class Store<T> where T : notnull
{
    private readonly HashSet<T> values = new();
    public bool Add(T value) => values.Add(value);
    public int Count => values.Count;
}

var store = new Store<string>();
store.Add("self");
UO.Print(store.Count.ToString());

泛型介面和委託的in和out表達了逆變和協變;這是與 in/out 方法的參數不同的詞語用法。它們指定相容引用類型的有效轉換。

官方文件:類型泛型與限制 - Microsoft Learn。

Clone this wiki locally