对于一个定义泛型类型为参数的函数,若是调用时传入的对象为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