zoukankan      html  css  js  c++  java
  • Nullable类型和HashSet<T>集合

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

    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; }
        }  
    
    
    
     
     
  • 相关阅读:
    带有头结点的链表的基本操作
    转:gdb相关学习
    wareshark网络协议分析之ARP
    wareshark网络协议分析之DHCP
    java多线程(内附实例:窗口售票问题、人和叉子的问题)
    Android深度探索(卷1)HAL与驱动开发 虚拟环境的安装
    source insigt、pc-lint、VS联合使用
    java arrays类学习
    C#函数重载
    (转)Pycharm用鼠标滚轮控制字体大小
  • 原文地址:https://www.cnblogs.com/One-dream-man/p/3734665.html
Copyright © 2011-2022 走看看