[沒有蠢問題] c# 如何分辨 實值型別,參考型別

[沒有蠢問題] c# 如何分辨 實值型別,參考型別 

修正

Bill叔留言說Nullable<T>就會破功了,直接拉到最後看看Bill叔的說明吧

Bill叔的Nullable泛型結構文章

小朱大留言說 GetType()就有 Type.IsValueType 屬性 可以判斷

另一篇相關的文章 也可以參考
[C#] 基礎 - Value Type , Reference Type 用看記憶體內容 來測試

前言

這不是理論教學文,是來聊聊我是如何分辨的。
實值型別,參考型別是很重要的基本功,在學習時除了用背的,一直想找個方式去判斷

二分法

宣告變數不給值的話,該變數是null,就是參考型別
不是null就是實值型別
舉例
string temp;

上面的程式碼 temp是null
喜歡用string當範例  因為string被動很多手腳,讓string擁有很多實值型別的特性
導致有人會以為string 實值型別 但string是參考型別喔

驗證

先給程式碼

public static class ValueTypeReferenceType
{
    public static void IsValueType()
    {
        byte _byte;
        int _int;
        uint _uint;
        double _double;
        decimal _decimal;
        char _char;
        bool _bool;
        DateTime _dateTime;
        DayOfWeek _enum;
        MyStruct _myStruct;
    }

    public static void IsReferenceType()
    {
        string _string;
        IDisposable _IDisposable;
        TimeZone _TimeZone;
        MyClass _myClass;
    }
}

public class MyClass
{
    public int MyInt { get; set; }
    public string MyString { get; set; }
    public override String ToString()
    {
        return string.Format("MyInt=>{0},MyString=>{1}", MyInt, MyString ?? "null");
    }
}

public struct MyStruct
{
    public int MyInt { get; set; }
    public string MyString { get; set; }
    public override String ToString()
    {
        return string.Format("MyInt=>{0},MyString=>{1}", MyInt, MyString ?? "null");
    }
}

結果用GIF來顯示 約60秒(不知道有沒有人會看完 XD)
 

結語

關於實值型別,參考型別的相關知識要去學習,這邊用一個簡單的方式
讓有時不是很肯定的時候可以馬上驗證
例如 DataTime 或 enum 是那種型別,有時後會不是很肯定吧 就來驗證看看吧

延伸閱讀

[C#][筆記] Value Type (實值型別) vs. Reference Type (參考型別)

C#未分類菜單-『實值型別與參考型別的記憶體配置』

[筆記文]實值型別和參考型別

本系列的文章的code都整理在這邊
https://github.com/initialsam/NoStupidQuestion

今天就先這樣囉 下次聊 Bye 

如果內容有誤請多鞭策謝謝