首先看一下泛型的基本语法

访问修饰符 返回类型 泛型方法名 <T>(T 参数)
 
1):无法在泛型方法内部给任何 T 类型创建实例的对象,因为在泛型方法内部不知道传进来的对象有哪些构造函数
2):约束是对内部的!(对于泛型方法)约束也是会被继承的!
 
3):给泛型类 加类型(引用类型,值类型)的约束:where T:class,new ( )
 
遇到的问题:
在写MongodbHelper类的时候,为了能处理多种类别,所以如下定义了该类:
 public class MongodbHelper<T>
 {
  。。。。。
  }
在该类的实现中有如下操作:

mongo.Connect();

var db = mongo.GetDatabase(_databaseName);

var collection = db.GetCollection<T>(_collectionName);

collection.Insert(t, true);

mongo.Disconnect();

这个是对mongo做插入操作的方法,这个时候,db.GetCollection<T>(_collectionName) 这里的T导致编译无法通过,因此查出上面的定义是有误的,GetCollection的签名如下:

IMongoCollection<T> GetCollection<T>(string name) where T : class;

它对T有特殊的自己的约束,因此

在定义的时候也要加上对应的约束,来保证T的约束一致。

C# 泛型类在使用中约束的更多相关文章

  1. C#泛型类的类型约束

    是使用泛型时,T默认情况下是不可以被初始化的,只能通过传值来赋值,这个时候可以使用类型约束来保证T是可以被约束的. .NET支持的类型参数约束有以下五种: where T: struct //T必须是 ...

  2. C#基础提升系列——C# 泛型

    C# 泛型(Generics) 泛型概述 泛型是C#编程语言的一部分,它与程序集中的IL(Intermediate Language,中间语言)代码紧密的集成.通过泛型,我们不必给不同的类型编写功能相 ...

  3. Introduction of OpenCascade Foundation Classes

    Introduction of OpenCascade Foundation Classes Open CASCADE基础类简介 eryar@163.com 一.简介 1. 基础类概述 Foundat ...

  4. [.net 面向对象编程基础] (18) 泛型

    [.net 面向对象编程基础] (18) 泛型 上一节我们说到了两种数据类型数组和集合,数组是指包含同一类型的多个元素,集合是指.net中提供数据存储和检索的专用类. 数组使用前需要先指定大小,并且检 ...

  5. Introduction of Open CASCADE Foundation Classes

    Open CASCADE Foundation Classes Open CASCADE基础类 eryar@163.com 一.简介 1. 基础类概述 Foundation Classes Overv ...

  6. C#泛型(C#_编程指南)CSDN学习整理笔记

    1.1. 泛型概述 2.0版C#语言和公共语言运行时(CLR)中增加了泛型.泛型将类型参数的概念引入.NETFramework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定 ...

  7. 20.C# 创建自己的泛型类型

    1.定义泛型类 可以使用以下语法创建泛型类,T可以是任意符合C#标识符命名规范的任意标识符 class MyGenericClass<T> { //.... } 泛型类可以包含任意多个类型 ...

  8. .NET泛型02,泛型的使用

    在" .NET泛型01,为什么需要泛型,泛型基本语法"中,了解了泛型的基本概念,本篇偏重于泛型的使用.主要包括: ■ 泛型方法重载需要注意的问题■ 泛型的类型推断■ 泛型方法也可以 ...

  9. typescript里一些有趣的点

    联合类型 在原生的JS里,null和undefined经常会导致BUG的产生, 在ts里,你又想用null,又担心出错的时候 你可以考虑用联合类型,当某值可能为 number或null,你可以声明它的 ...

随机推荐

  1. Typecho 插件开发基础

    <?php /** * 标题 插件说明 * * @package 添加标题 * @author Fan * @version 1.0.0 * @link http://cnblogs.com/f ...

  2. Check the NativeLink log file

    今天用Quartus ii16.1仿真Cyclone IV的IP核DDR2,总是报上面的错误 .网上都说是modelsim路径的问题, 但我确定不是.最后用QaurtusII 12.1可以通道仿真. ...

  3. redis的repl-ping-slave-period和repl-ping-replica-period

    网上很多Redis方面的文章,会涉及到repl-ping-slave-period和repl-ping-replica-period这两个重要参数,从一些中文解释来看,意思差不多,即:SLAVE周期性 ...

  4. 通过Windows API实现的MDI简易程序

    ## #include <windows.h> #include <tchar.h> HINSTANCE hInst; ATOM WindowRegister(WNDPROC ...

  5. spring之hello(简单环境配置)

    导入java包 配置springmvc.xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  6. 实用shell命令100条

    1,echo "aa" > test.txt 和 echo "bb" >> test.txt //>将原文件清空,并且内容写入到文件中, ...

  7. noip第10课资料

  8. D3_book 11.2 stack

    <!-- book :interactive data visualization for the web 11.2 stack 一个堆叠图的例子 --> <!DOCTYPE htm ...

  9. hdu5016

    题意:给定一个n个点的图,这个图是一棵树,然后有些点建立了集市.并且没有集市的地方去集市一定是去最近的,如果距离相同,那么则去标号最小的..现在你还能在建一个集市,问建完这个集市最多有多少个点来这里. ...

  10. Python 中的深拷贝和浅拷贝

    一.浅拷贝python中 对象赋值时 默认是浅拷贝,满足如下规律:1. 对于 不可变对象(字符串,元组 等),赋值 实际上是创建一个新的对象:例如: >>> person=['nam ...