【C#食譜】【麵食】菜單7:用預設值初始化泛型變數

來源:互聯網
上載者:User

問題:ee6d64b9

你有一個泛型類包含一個由類自身定義型別參數的變數。由於對泛型對象的約束,你希望這個變數被初始化為其預設值。

解決方案:

非常簡單的方法:只要使用default關鍵字初始化其值為預設值即可:

    public class DefaultValueExample<T>
    {
        T data = default(T);

        public bool IsDefaultData()
        {
            T temp = default(T);

            if (temp.Equals(data))
            {
                return (true);
            }
            else
            {
                return (false);
            }
        }
        
        public void SetData(T val)
        {
            data = val;
        }
    }

 

使用這個類的代碼可以參考這裡:

using System;
using System.Collections.Generic;
using System.Text;

namespace SetDefaultValueExample
{
    class Program
    {
        static void Main(string[] args)
        {
            DefaultValueExample<int> dv = new DefaultValueExample<int>();

            // 檢查是否被設定為預設值,如果是返回true
            bool isDefault = dv.IsDefaultData();
            Console.WriteLine("Initial data: " + isDefault);

            // 設定資料
            dv.SetData(100);
            // 再次檢查,這個時候應該返回false
            isDefault = dv.IsDefaultData();
            Console.WriteLine("Set data: " + isDefault);
        }
    }

    public class DefaultValueExample<T>
    {
        T data = default(T);

        public bool IsDefaultData()
        {
            T temp = default(T);

            if (temp.Equals(data))
            {
                return (true);
            }
            else
            {
                return (false);
            }
        }

        public void SetData(T val)
        {
            data = val;
        }
    }
}

 當初始化一個相同型別參數的變數時,你不能只是設定這些變數為null。如果這個變數是實值型別,比如說int或char,那會是什麼呢?那將不能運行,因為實值型別不能是null的。你也許會想到一個nullable類型,比如long?或者Nullable<long>,可以被設為空白。然而,編譯器無法知道使用者將使用什麼型別參數去構造這個類型。

default關鍵字允許你告訴編譯器在編譯時間,這個類型的預設值將被使用。如果提供的型別參數是數值(int,long,decimal),那麼預設值將會是0。如果是參考型別,那麼預設值將會是null。如果是結構體,那麼這個結構體的預設值將根據其每一個欄位的類型設為0或null。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.