您的位置:首页 > 其它

Nullable类型和HashSet<T>集合

2014-05-17 23:15 387 查看
今天接触到两个新的类型,查了一下才发现它们已经出现好久了,特作一下标记

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;}
}






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: