今天接触到两个新的类型,查了一下才发现它们已经出现好久了,特作一下标记

Nullable结构

在System命名空间下,在 .NET Framework 2.0 版中是新增的;用它定义的值类型的对象与引用类型一样也可以分配空引用

这样看来有点和 int? a 有点相似,根据不同的应用场合,我们会经常使用可空类型来表示存在或不存在的内容,但是这个Nullable 结构有两个基础成员为HasValue 和Value 属性,如果 Nullable 对象的 HasValue 属性为 true,则可以使用 Value 属性访问该对象的值。如果 HasValue 属性为false,则表示尚未定义该对象的值,并且尝试访问 Value 属性时会引发 InvalidOperationException,在使用这个值的时候如果使用这两个属性就极大的减少了忘记判断值类型造成的异常问题(一个值类型变量是不可以被赋予null值的,否则会产生异常),这就又出来了一个装箱拆箱的问题

int? First = null;
int  Second = 2;  nFirst = Second;    // 可以
nFirst = null;      // 可以
Second = nFirst;   // 如果直接复制就会抛出异常, if (nFirst.HasValue) Second 是一个非nullable型变量 侧不会。 HashSet集合
HashSet<T>集合   .NET Framework 3.5中出现在命名空间: System.Collections.Generic下,实现了 ICollection<T>, IEnumerable<T>等接口,从.Net Framework 4开始 又实现了ISet<T>接口
MSDN上说  HashSet<T> 类提供高性能的集运算(集合是一组不重复出现且无特定顺序的元素),由于他是无序的所以在操作数据的时候要比List<T>效率会高点,同事具有集合的功能
HashSet<T> 对象的容量将随该对象中元素的添加而自动增大。
案例如下:EF codefirst简单实现
public partial class Shop
{
public ClassInfo()
{
this.Products = new HashSet<Product>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SID { get; set; }
[Required]
public string Sname { get; set; }
public string SCode { get; set; }
[Required]
public Nullable<int> MemberID{ get; set; }
[Required]
public Nullable<int> SLevel{ get; set; }
[Required]
public Nullable<int> State{ get; set; }
public string CloseReason{ get; set; }
public virtual ICollection<Product> Products { get; set; }
} public partial class Product
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PID { get; set; }
[Required]
public string PName { get; set; }
[Required]
public Nullable<int> Count { get; set; }
[Required]
public Nullable<Decimal> Price { get; set; }
[Required]
public Nullable<int> State{ get; set; }
[Required]
public Nullable<int> Category{ get; set; }
[Required]
public Nullable<int> PWeight{ get; set; }
public string Summary{ get; set; }
public virtual Shop ShopEntity{ get; set; }
} public partial class PJYDBEntities : DbContext
{
public PJYDBEntities()
: base("name=PJYEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
} public DbSet<Product> Product{ get; set; }
public DbSet<Shop> Shop{ get; set; }
}

 
 

Nullable类型和HashSet<T>集合的更多相关文章

  1. JAVA异常处理、常用类、反射、集合

    异常 异常:在Java中是指被一个方法抛出的对象. 分类:检查异常.运行时异常.错误 运行时异常(uncheckd):RuntimeException和其子类 检查异常(checkd/搜检异常):指E ...

  2. Java:类集框架中集合的学习

    Java:类集框架中集合的学习 集合 Java:Set的学习 Set是类集框架中的集合类.集合是不按特定的方式排序,并且没有重复对象的一种类. Q:Set如何操作?Set中的不按特定方式排序是怎么排序 ...

  3. DATETIME类型和BIGINT 类型互相转换

    项目中使用BIGINT来存放时间,以下代码用来转换时间类型和BIGINT类型 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========= ...

  4. AngularJs:String类型和JSON相互转换

    最近一周做了一个页面,制作的过程中遇到各种问题,从中可以看出本人的js基础还不够扎实,angularjs也只是刚入门的水平,现在将制作过程中遇到的问题一一汇总,方便以后查阅. 一.String类型和J ...

  5. Timestame类型和String 类型的转化

    Timestame类型和String 类型的转化 String转化为Timestamp: SimpleDateFormat df = new SimpleDateFormat("yyyy-M ...

  6. Python3.x中bytes类型和str类型深入分析

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...

  7. Date类型和Long类型的相互转换

    Date类型和Long类型的相互转换: import java.text.SimpleDateFormat; import java.util.Date; public class T { publi ...

  8. Java数据类型和MySql数据类型对应一览

    类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N ...

  9. java中XMLGregorianCalendar类型和Date类型之间的相互转换

    import java.text.SimpleDateFormat;import java.util.Date;import java.util.GregorianCalendar;import ja ...

随机推荐

  1. linux 系统获取网络ip, mask, gateway, dns信息小程序

    net_util.c #define WIRED_DEV                   "eth0"     #define WIRELESS_DEV             ...

  2. HTTP分段下载

    现代WEB服务器都支持大文件分段下载,加快下载速度,判断WEB服务器是否支持分段下载通过返回头是否有 Accept-Ranges: bytes 字段.分段下载分为两种,一种就是一次请求一个分段,一种就 ...

  3. SQL Server中CURD语句的锁流程分析

    我只在数据库选项已开启“行版本控制的已提交读”(READ_COMMITTED_SNAPSHOT为ON)中进行了观察. 因此只适用于这种环境的数据库. 该类数据库支持四种不同事务隔离级别,下面分别观察数 ...

  4. Java笔记(十七)……异常

    异常概述 异常是什么 是对问题的描述,将问题进行对象的封装 异常体系 Throwable |---Error |---Exception |---RuntimeException 异常体系的特点 异常 ...

  5. oracle 创建索引思考(转)

    在Oracle数据库中,创建索引虽然比较简单.但是要合理的创建索引则比较困难了. 笔者认为,在创建索引时要做到三个适当,即在适当的表上.适当的列上创建适当数量的索引.虽然这可以通过一句话来概括优化的索 ...

  6. 【解决】Oracle数据库实现ID自增长

    Oracle数据库要实现ID的自增长,需要创建一个序列和触发器来实现,略微有一点点麻烦,但是也是可以解决的. 直接上地址,首先,http://www.wlcrane.com/article.aspx? ...

  7. HUD-4602 Partition 排列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4602 把n等效为排成一列的n个点,然后就是取出其中连续的k个点.分两种情况,一种是不包含两端,2^( ...

  8. A Tour of Go Short variable declarations

    Inside a function, the := short assignment statement can be used in place of a var declaration with ...

  9. Win+R指令(1)

    CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本)1. appwiz.cpl:程序和功能 2. calc:启动计算器 3. certmgr. ...

  10. Supervisor的安装与使用入门

    Supervisor是一个进程管理工具,官方的说法 自己开发的应用往往也希望做到随系统自动启动, 而且启动之后最好还能方便的控制其停止/重启. 传统的做法是在 /etc/init.d/ 下建立启动脚本 ...