對於一個定義泛型類型爲參數的函數,若是調用時傳入的對象爲T對象或者爲T的子類,在函數體內部若是須要使用T的屬性的方法時,咱們能夠給這個泛型增長約束;函數
類的定義 spa
public class ProductEntryInfo { [Description("商品編號")] public int ProductSysNo { get; set; } //more } public class ProductEntryInfoEx : ProductEntryInfo { [Description("成份")] public string Component { get; set; } //more }
方法code
private static string CreateFile<T>(List<T> list)
where T:ProductEntryInfo { int productSysNo =list[0].ProductSysNo
}
調用 對象
List<ProductEntryInfo> peList = new List<ProductEntryInfo>(); string fileName = CreateFile( peList); List<ProductEntryInfoEx> peList = new List<ProductEntryInfoEx>(); string fileNameEx = CreateFile(checkListAll);
這樣就能夠實現上邊的CreateFile方法了blog
這樣類型參數約束,.NET支持的類型參數約束有如下五種:繼承
where T : struct | T必須是一個結構類型
where T : class T必須是一個類(class)類型
where T : new() | T必需要有一個無參構造函數
where T : NameOfBaseClass | T必須繼承名爲NameOfBaseClass的類
where T : NameOfInterface | T必須實現名爲NameOfInterface的接口接口
分別提供不一樣類型的泛型約束ip
能夠提供相似get
class MyClass<T, U> where T : class where U : struct { }
在MSDN詳細說明:http://msdn.microsoft.com/zh-cn/library/bb384067.aspxstring