今天接觸到兩個新的類型,查了一下才發現它們已經出現很久了,特做一下標記ide
在System命名空間下,在 .NET Framework 2.0 版中是新增的;用它定義的值類型的對象與引用類型同樣也能夠分配空引用性能
這樣看來有點和 int? a 有點類似,根據不一樣的應用場合,咱們會常常使用可空類型來表示存在或不存在的內容,可是這個Nullable 結構有兩個基礎成員爲HasValue 和Value 屬性,若是 Nullable 對象的 HasValue 屬性爲 true,則可使用 Value 屬性訪問該對象的值。若是 HasValue 屬性爲false,則表示還沒有定義該對象的值,而且嘗試訪問 Value 屬性時會引起 InvalidOperationException,在使用這個值的時候若是使用這兩個屬性就極大的減小了忘記判斷值類型形成的異常問題(一個值類型變量是不能夠被賦予null值的,不然會產生異常),這就又出來了一個裝箱拆箱的問題
ui
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; } }