C#3.0中對象初始化器和集合初始化器

來源:互聯網
上載者:User

C# 3.0 中對象初始化器(Object Initializers)  和 集合初始化器(Collection Initializers) ,就是簡化我們的代碼,讓本來幾行才能寫完的代碼一行寫完。這樣在LINQ的使用中,我們才不會把一個LINQ運算式寫的巨複雜無比。

  由於我看到幾篇講 對象初始化器(Object Initializers)和集合初始化器(Collection Initializers) 的文章,都是一個簡單的例子,一些稍稍特殊一點的情境的初始化賦值並沒有涉及,所以我特整理這篇部落格。

關於對象初始化器(Object Initializers) 的一些問題:

問題一: 對象初始化器允許只給部分值賦值嗎?即不給其中一些值賦值

答案:允許;參考後面的代碼。

問題二:對象初始化器允許給internal 的成員賦值?(私人成員肯定不用想了,肯定不能賦值。)

答案:允許;參考下面的代碼。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    private int test01 = 25;
    internal int test02;
}

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person { FirstName = "Scott", LastName = "Guthrie", test02 = 56, };
        Console.WriteLine(person.test02);
        Console.WriteLine(person.Age);
        Console.ReadLine();
    }

}

問題三:對象初始化器是否可以結合建構函式一起使用?

答案:可以參看如下代碼就可以正常使用:

var cookie3 = new System.Net.Cookie("MyCookie", "Jose") { Comment = "a cookie" };

我們在建構函式中給 Cookie 的名字和值賦了值,在初始化構造器中給 Comment 屬性賦了值。

問題四:建構函式賦值和初始化構造器賦值那個最先被執行?

比如下述代碼,結果是那個呢??

static void Main(string[] args)
{
    var cookie = new System.Net.Cookie("MyCookie", "Jose") { Name = "test02", Comment = "a cookie" };
    Console.WriteLine(cookie.Name);
    Console.ReadLine();
}

答案:

建構函式比初始化構造器更早被執行。

上述WriteLine 寫出來的資訊為:test02

集合初始化器(Collection Initializers) 的一些問題:

問題一:集合初始化構造器中是否可以構造集合的一項為空白值?

答案:可以,參看下述代碼。

問題二:集合初始化構造器是否可以初始化Hashtable ?

答案:可以。這時候相當於用了兩個對象初始化構造器,參看下面代碼:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    private int test01 = 25;
    internal int test02;
}

class Program
{
    static void Main(string[] args)
    {
        List<Person> people = new List<Person>{
            new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32 },
            new Person { FirstName = "Bill", LastName = "Gates", test02 = 85},
            new Person { FirstName = "Susanne", Age = 32 },
            null,
        };

        Hashtable pp = new Hashtable {
            { 1, new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32 } },
            { 2, new Person { FirstName = "Bill", LastName = "Gates", test02 = 85} },
            { 3, new Person { FirstName = "Susanne", Age = 32 } },
            { 4, null },
                       };

        Console.ReadLine();
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.