C# 提供了泛型,讓我們可以用更有彈性的方式來設計Class、Method,操作資料

透過泛型類型 <型別參數T>來代表型別(int, string, double…)

可以在宣告時再指定型別,

以下透過範例來說明幾種情況的用法:

方法泛型 (Generic Method)

在Method使用泛型,只要在Method後面接上泛型類型 <型別參數T> 就可以在宣告時,再指定型別, 並且,可以搭配.GetType()來檢查型別 範例:

static void MyDemo<T>(T x)
{
    Console.WriteLine("您傳入的型別為"+x.GetType()+ ",值=" + x);
}

static void Main(string[] args)
{
    MyDemo<string>("Hello");//您傳入的型別為System.String,值=Hello
    MyDemo<int>(3);//您傳入的型別為System.Int32,值=3
    MyDemo<double>(3.14);//您傳入的型別為System.Double,值=3.14
}

類別泛型(Generics Class)

在class使用泛型,一樣直接加上 <型別參數T> 即可 在這裡示範如何透過Class泛型來手動做一個簡易的list功能

範例:

// Declare the generic class.
public class MyListClass<T>
{
	//初始化array,並參考泛型別
    T[] innerArray = new T[0];
    
	//Add Method - 新增一個array項目
    public void Add(T item)
    {
        Array.Resize(ref innerArray, innerArray.Length + 1);
        innerArray[innerArray.Length - 1] = item;
    }
    
	//Get Method - 取得array特定key的value
    public T Get(int k) {
        return innerArray[k];
    }
	//All Method - return array
    public T[] All()
    {
        return innerArray;
    }
}

static void Main(string[] args)
{
    // Declare a list of type int.
    MyListClass<int> listA = new MyListClass<int>();
    listA.Add(3);
    listA.Add(4);
    listA.Add(5);
    listA.Add(2);
    foreach (int row in listA.All()) {
        Console.WriteLine(row);
    }
}