Nullable类型和HashSet<T>集合
2014-05-17 23:15
387 查看
今天接触到两个新的类型,查了一下才发现它们已经出现好久了,特作一下标记
这样看来有点和int?a有点相似,根据不同的应用场合,我们会经常使用可空类型来表示存在或不存在的内容,但是这个Nullable结构有两个基础成员为HasValue和Value属性,如果Nullable对象的HasValue属性为true,则可以使用Value属性访问该对象的值。如果HasValue属性为false,则表示尚未定义该对象的值,并且尝试访问Value属性时会引发InvalidOperationException,在使用这个值的时候如果使用这两个属性就极大的减少了忘记判断值类型造成的异常问题(一个值类型变量是不可以被赋予null值的,否则会产生异常),这就又出来了一个装箱拆箱的问题
Nullable结构
在System命名空间下,在.NETFramework2.0版中是新增的;用它定义的值类型的对象与引用类型一样也可以分配空引用这样看来有点和int?a有点相似,根据不同的应用场合,我们会经常使用可空类型来表示存在或不存在的内容,但是这个Nullable结构有两个基础成员为HasValue和Value属性,如果Nullable对象的HasValue属性为true,则可以使用Value属性访问该对象的值。如果HasValue属性为false,则表示尚未定义该对象的值,并且尝试访问Value属性时会引发InvalidOperationException,在使用这个值的时候如果使用这两个属性就极大的减少了忘记判断值类型造成的异常问题(一个值类型变量是不可以被赋予null值的,否则会产生异常),这就又出来了一个装箱拆箱的问题
int?First=null; intSecond=2; nFirst=Second;//可以
nFirst=null;//可以 Second=nFirst;//如果直接复制就会抛出异常,if(nFirst.HasValue)Second是一个非nullable型变量侧不会。 HashSet集合
HashSet<T>集合.NETFramework3.5中出现在命名空间:System.Collections.Generic下,实现了ICollection<T>,IEnumerable<T>等接口,从.NetFramework4开始又实现了ISet<T>接口 MSDN上说HashSet<T>类提供高性能的集运算(集合是一组不重复出现且无特定顺序的元素),由于他是无序的所以在操作数据的时候要比List<T>效率会高点,同事具有集合的功能 HashSet<T>对象的容量将随该对象中元素的添加而自动增大。 案例如下:EFcodefirst简单实现
publicpartialclassShop { publicClassInfo() { this.Products=newHashSet<Product>(); } [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] publicintSID{get;set;} [Required] publicstringSname{get;set;} publicstringSCode{get;set;} [Required] publicNullable<int>MemberID{get;set;} [Required] publicNullable<int>SLevel{get;set;} [Required] publicNullable<int>State{get;set;} publicstringCloseReason{get;set;} publicvirtualICollection<Product>Products{get;set;} } publicpartialclassProduct { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] publicintPID{get;set;} [Required] publicstringPName{get;set;} [Required] publicNullable<int>Count{get;set;} [Required] publicNullable<Decimal>Price{get;set;} [Required] publicNullable<int>State{get;set;} [Required] publicNullable<int>Category{get;set;} [Required] publicNullable<int>PWeight{get;set;} publicstringSummary{get;set;} publicvirtualShopShopEntity{get;set;} } publicpartialclassPJYDBEntities:DbContext { publicPJYDBEntities() :base("name=PJYEntities") { } protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder) { thrownewUnintentionalCodeFirstException(); } publicDbSet<Product>Product{get;set;} publicDbSet<Shop>Shop{get;set;} }
相关文章推荐
- 使用HashSet<>去除重复元素的集合
- Java集合三种类型:Set<集>、List<列表>、Map<映射>
- <java API源码初体验>4---collection集合之HashSet原理分析
- .net集合类的研究--哈希表(二)--HashSet<T>
- Java集合源码分析(五)HashSet<E>
- 深入学习java集合:HashSet<E>实现
- 使用HashSet<String>将map集合去重
- 使用HashSet<>去除重复元素的集合
- Hibernate逍遥游记-第12章 映射值类型集合-001映射set(<element>)
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- .net集合类的研究--哈希表(二)--HashSet<T>
- 使用<s:iterator>标签来循环遍历某一实体下的set集合数据
- Java集合转换【List<-->数组、List<-->Set、数组<-->Set、Map-->Set、Map-->List】
- 获得Nullable<T>里的T的类型
- 类型“string”必须是不可以为 null 值的类型才能用作泛型类型或方法“System.Nullable<T>”中的参数“T”
- 黑马程序员——>第十五天<集合框架(TreeSet-泛型)>
- 如何将一个List<Map<String,String>>类型的集合数据转换成json格式输出
- 【基础语言学习】C#中的可空类型运算(Nullable<T>)------T?
- ArrayList、List<T>、HashSet<T>、LinkedList<T>各自优点和缺点,Dictionary<K,V>的内部存储数据方式有什么特殊的?
- System.Nullable<T> int? 数据库中的int类型可以为空 在C# 中 的处理