对于一个定义泛型类型为参数的函数,如果调用时传入的对象为T对象或者为T的子类,在函数体内部如果需要使用T的属性的方法时,我们可以给这个泛型增加约束;

  类的定义 

   public class ProductEntryInfo
{
[Description("商品编号")]
public int ProductSysNo { get; set; }
//more
} public class ProductEntryInfoEx : ProductEntryInfo
{ [Description("成份")]
public string Component { get; set; }
//more
}

方法

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方法了

  这样类型参数约束,.NET支持的类型参数约束有以下五种:

    where T : struct | T必须是一个结构类型
    where T : class T必须是一个类(class)类型
    where T : new() | T必须要有一个无参构造函数
    where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类
    where T : NameOfInterface | T必须实现名为NameOfInterface的接口

分别提供不同类型的泛型约束

  可以提供类似

class MyClass<T, U>
where T : class
where U : struct
{ }

在MSDN详细说明:http://msdn.microsoft.com/zh-cn/library/bb384067.aspx

where T:class 泛型类型约束的更多相关文章

  1. C#高级编程之泛型二(泛型类型约束、类型、反射与泛型)

    泛型类型约束 简言之:对泛型类型进行约束,细化,限定. MSDN的定义:泛型定义中的 where 子句指定对用作泛型类型.方法.委托或本地函数中类型参数的参数类型的约束,意思就是可以有泛型类.泛型方法 ...

  2. C# where(泛型类型约束)

    /*在泛型类型定义中,where 子句用于指定对下列类型的约束:这些类型可用作泛型声明中定义的类型参数的实参. 例如,可以声明一个泛型类 MyGenericClass,这样,类型参数 T 就可以实现 ...

  3. where(泛型类型约束)

    .NET支持的类型参数约束有以下五种: where T : struct T必须是一个结构类型 where T : class T必须是一个类(class)类型,不能是结构(structure)类型 ...

  4. C# where 泛型类型约束

    泛型定义中的 where 子句指定对用作泛型类型.方法.委托或本地函数中类型参数的参数类型的约束. 约束可指定接口.基类或要求泛型类型为引用.值或非托管类型. 它们声明类型参数必须具备的功能. 作为约 ...

  5. where T : class泛型类型约束

    类型参数约束,.NET支持的类型参数约束有以下五种: where T : struct | T必须是一个结构类型where T : class T必须是一个类(class)类型where T : ne ...

  6. 类的 where T : class 泛型类型约束

    where T : struct | T必须是一个结构类型where T : class T必须是一个类(class)类型where T : new() | T必须要有一个无参构造函数where T ...

  7. C#学习(1):类型约束

    where T : class泛型类型约束 类型参数约束,.NET支持的类型参数约束有以下五种: where T : struct | T必须是一个结构类型 where T : class T必须是一 ...

  8. C#知识点记录

    用于记录C#知识要点. 参考:CLR via C#.C#并发编程.MSDN.百度 记录方式:读每本书,先看一遍,然后第二遍的时候,写笔记. CLR:公共语言运行时(Common Language Ru ...

  9. 模板(Template)

    最近阅读google chromium base container stack_container代码,深刻感觉到基础知识不扎实. // Casts the buffer in its right ...

随机推荐

  1. 分布式系统状态下redis存储asp.net session使用第三方Providers驱动

    https://github.com/ServiceStack/ServiceStack.Redis (redis客户端组件) 注:redis服务端在windows不太稳定,一般部署在Linux下. ...

  2. x64位windows上程序开发的注意事项

    在Windows上面32位与64位的区别有: 1.指针大小的区别,sizeof(int *)在32bit下面是4个字节,在64bit下面是8个字节 2.size_t的区别,size_t在32bit下面 ...

  3. 再回首,Java温故知新(八):Java基础之字符串

    字符串是Java中使用频率最高的类,但是它却不属于基本类型,而是预定义了String类来表示.从String类的源码可以看到,String是基于char[]实现的,而且Java中的String是不可变 ...

  4. Slow Server? This is the Flow Chart You're Looking For--reference

    Your high-powered server is suddenly running dog slow, and you need to remember the troubleshooting ...

  5. MVC实现登录,增删改查之数据展示:JSP的EL表达式(二)

    这里的数据展示利用jsp的EL表达式,后台放入session,前台EL获取 数据库设计是这样的,一个老师对应有多个学生,在学生表student中建立外键tid与老师表teacher的tid对应,现在老 ...

  6. 从C到汇编:栈是计算机工作的基础

             作者:r1ce        原创作品转载请注明出处       <Linux内核分析> MOOC课程http://mooc.study.163.com/course/U ...

  7. Day11 - Mysql and ORM

    python 之路,Day11 - python mysql and ORM   本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 ...

  8. Android关闭系统锁屏

    昨晚探索了一下Android系统内的目录,意外发现系统锁屏的数据库 使用adb shell进入系统根目录 adb shell su sqlite3 data/system/locksettings.d ...

  9. $(document).ready(function(){}),$().ready(function(){})和$(function(){})三个有区别么

    三者都是一样的,最完整的写法是:$(document).ready(function(){})ready() 函数仅能用于当前文档,因此无需选择器.所以document选择器可以不要,那么就可以写成: ...

  10. 了解HTML的代码注释

    什么是代码注释?代码注释的作用是帮助程序员标注代码的用途,过一段时间后再看你所编写的代码,就能很快想起这段代码的用途. 代码注释不仅方便程序员自己回忆起以前代码的用途,还可以帮助其他程序员很快的读懂你 ...