Skip to content
Rain Hu's Workspace
Go back

[C#] Generic 泛型

Rain Hu

1. 數組到泛型集合

string[] names = new string[4];     // 需指定大小
    ArrayList names = new ArrayList();
    names.AddRange(new object[]
    {
        "Rose",
        "Jack",
        new int?(5)     // 可合法進行編譯, 因為符合 object
    });
    foreach (string name in names) Console.WriteLine(name); 
    // 缺少型別檢查, 在執行隱性類型轉換(int? 轉 string)時會出錯
    StringCollection names = new StringCollection();
    names.AddRange(new string[]
    {
        "Rose",
        "Jack",
        "Gozilla"
    });
    static void printNames(StringCollection names) 
    {
        foreach (string name in names) Console.WriteLine(name);
    }
List<string> names = new List<string>{
    "Rose",
    "Jack",
    "Gozilla"
};
static void printList(List<T> list) {
    foreach (T item in list) Console.WriteLine(item);
}

2. 靜態方法取代建構式

// 靜態泛型函式
public static Tuple<T1, T2> CreateTuple(T1 item1, T2 item2) 
{
    return new Tuple<T1, T2>(item1, item2);
}
// 泛型建構式   
var tuple1 = new Tuple<string, int>("Jack", 18);
var tuple2 = CreateTuple("Jack", 18);   // 由於類型推斷, 省去寫泛型型別

3. 類型約束

public static void SortList<T>(List<T> items) where T : IComparable<T>
{
    // 因為限定 T 需要繼承 IComparable, 所以可以叫用其 CompareTo 方法
    items.Sort((x,y) => x.CompareTo(y));
}

4. 泛型類型的初始化與狀態


Share this post on:

Previous
[C#] Nullable 可空值類型
Next
[Life] 原子習慣