[沒有蠢問題] c# 如何分辨 實值型別,參考型別
修正
Bill叔留言說Nullable<T>就會破功了,直接拉到最後看看Bill叔的說明吧
小朱大留言說 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 (參考型別)
本系列的文章的code都整理在這邊
https://github.com/initialsam/NoStupidQuestion
今天就先這樣囉 下次聊 Bye
如果內容有誤請多鞭策謝謝