程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#3.0新特性(二)-初始值設定項(3)

C#3.0新特性(二)-初始值設定項(3)

編輯:關於C語言

三、將對象初始值設定項用於匿名類型

查詢表達式經常使用匿名類型,而這些類型只能使用對象初始值設定項進行初始化。如:

MyClass[] ojbset = new MyClass[12];
var vaobj =
  from obj in ojbset
  select new { obj.Name, obj.Number };

也就是說,把obJSet中的每一個obj的Name屬性和Number屬性拿來,new成新隱式類型,賦值給vaobj,這種新類型的屬性名也被省略掉了,那實際上,其屬性名就是Name和Nnumber,值分別是它們兩者的值。這個方式呢,由於new { obj.Name,obj.Number };這句是new的一個新的隱式類型,與類MyClass沒有關系,所以,MyClass沒有無參構造函數也是可以的。而如果要在new隱式類型的時候,重新命名其屬性,則可以采用如下方式:

var varobj =
  from vobj in ojbset
  select new { vobj.Name, ID = vobj.Number };

四、集合初始值設定項

集合初始值設定項,也叫集合初始化器,會對初始化器中的元素進行按序調用ICollection<T>.Add(T) 。使用集合初始值設定項的對象的類型必須實現了System.Collections.Generic.ICollections<T>接口並指定了確定的T。使用它可以在初始化一個實現了IEnumerable的集合類時指定一個或多個元素初始值;

元素初始值設定項可以是簡單的值,也可以是表達式或對象初始值設定項;

通過使用集合初始值設定項,無需在源代碼中指定多個對該類的Add 方法的調用;編譯器會添加這些調用。

例子如下:

public void setinit()
{
  List<int> digits = new List<int> {
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  };
  List<int> digits2 = new List<int> {
    0 + 1, 12 % 3, getIntNumber()
  };
  List<MyClass> customers = new List<MyClass>{
    new MyClass{Number="1111",Name="yy"},
    new MyClass{Number="2222",Name="QQ"},
    new MyClass{Number="3333",Name="qiqi"}
  };
}
public int getIntNumber()
{
  return 56;
}

這和以前調用List.Add沒有本質的區別,編譯器自動的調用了List的無參構造方法,然後實例化一個個的MyClass,再一個個的Add進去,和我們原來的做法沒有什麼不同,但是,這是編譯器在後台自動處理,簡省了我們很多的編碼工作。

注:

各項之間還是用逗號,結束了,花括號後邊表示new這個集合結束,用分號。

如果集合的Add 方法允許,可以將null 指定為集合初始值設定項中的一個元素。如:

List<MyClass> customers = new List<MyClass>{
  new MyClass{Number="1111",Name="yy"},
  new MyClass{Number="2222",Name="QQ"},
  new MyClass{Number="3333",Name="qiqi"},
  null
};

五、總結

這些新特性平常怕是很少用到的,因為已經習慣了C# 2.0的寫法,而且,這樣寫又不是必須的。但真正熟悉了,編譯器已經幫開發人員做了越類越多的工作,從而節約了我們的開發時間。或許,在其它的應用當中,這樣的語法還能用的到吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved