4、TryParse比Parse好
下面的TryParse的方法定義
public static bool TryParse(string s, out Double result);
Parse如果轉換失敗會報錯,但是TryParse有傳回值可以判斷是否轉換成功
string str1 = "abfc12";if(double.TryParse(str1, out double dou1)){ Console.WriteLine(dou1);}
5、建議使用int? 來確保實值型別也可以為null
如果有需要實值型別為空白,我們可能會使用一個特殊值例如 -1 來判斷int是不是為空白,最好改成int?類型,判斷是否為null
Nullable<int> i1 = 4;// i2 和 i1 的定義方式一樣 只是寫法不同 下面的int?是一個文法糖int? i2 = null;int i3 = 0;//int類型可以預設轉為int?類型i2 = i3;//int?類型需要強轉成int類型,如果是null則變為0i3 = (int)i2;
6、區別readonly和const的使用方法
簡單區別就是const效率高,readonly靈活性高
const是編譯器常量,readonly是運行時常量
const int constNum = 1;public string name;public int age;public FirstType(){ name = "aa"; age = constNum; age = 1;}//使用以上代碼測試,下面的編譯成的IL代碼 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: nop IL_0007: nop IL_0008: ldarg.0 IL_0009: ldstr "aa" IL_000e: stfld string CSharpSuggest.FirstType::name IL_0013: ldarg.0 IL_0014: ldc.i4.1 IL_0015: stfld int32 CSharpSuggest.FirstType::age IL_001a: ldarg.0 IL_001b: ldc.i4.1 IL_001c: stfld int32 CSharpSuggest.FirstType::age IL_0021: ret
可以看出13,14,15 和 1a,1b,1c是一樣的,所以 age = constNum;和 age = 1;是等效的 所以效率最高
const只能修飾基元類型、枚舉類型或字串類型,readonly則沒有限制
const天然是static 不能再增加static
readonly的值一般在建構函式裡面賦值,每一個類的對象都可以擁有不同的readonly值,但由於const是靜態,所以所有的類該值都是一樣的
書中有上面這一句話,我一直有個疑問,在類內賦值和建構函式賦值有什麼區別,網上沒搜到,反編譯出來的IL代碼僅僅是變數定義的順序區別,如果有知道請告知。。
7、將0作為枚舉的預設值
我理解的是如非必要,不要更改枚舉的數值,可能會出現意料之外的結果
8、避免給枚舉類型元素提供顯示的值
原因同上
相關文章:
C#學習記錄:編寫高品質代碼改善整理建議1-3
C#學習記錄:編寫高品質代碼改善整理建議9-15