讀改善c#程式碼157個建議:建議7~9

K戰神發表於2015-07-16

目錄:

  • 建議7:將0值作為列舉的預設值
  • 建議8:避免給列舉型別的元素提供顯示的值
  • 建議9:習慣運算子過載

 

一、建議7:將0值作為列舉的預設值

允許使用的列舉型別有:byte、sbyte、short、ushort、int、uint、long、ulong。

不指定值,預設從0開始計數,後面的元素依次+1。

enum Week
    {
        Monday=1,
        Tuesday=2,
        Wednessday=3,
        Thursday=4,
        Friday=5,
        Saturday=6,
        Sunday=7
    }

列舉是值型別,初始化時沒有指定值,會賦值預設值0。

static Week week;
        
        static void Main(string[] args)
        {
           
            Console.WriteLine(week.ToString());

            Console.ReadKey();
        }

 執行結果:0

 

二、建議8:避免給列舉型別的元素提供顯示的值

如果我們不給Week裡面的成員賦值,那會從0開始,逐一+1。後續我們需要新增新成員時,在最後新增即可,且不影響前面的值。

enum Week
    {
        Monday=1,
        Tuesday=2,
        Wednessday=3,
        Thursday=4,
        Friday=5,
        Saturday=6,
        Sunday=7
    }

看了一下專案,裡面有許多是給成員賦值了。這種情況多數是對應資料庫相應欄位的值(例如:每個值代表一種情況 — 等待=2,傳送成功=1,未傳送=3,傳送失敗=0)

還有一種情況是列舉值位運算,可以瞅瞅我之前寫的:列舉與位運算

 

三、建議9:習慣運算子過載

我們很自然地這樣使用+

decimal a = 1;
decimal b = 2;
decimal c = a + b;

當然也可以這樣:

decimal c1=decimal.Add(a,b);

以上兩種情況都是兩數相加,但是第一種+更加符合我們的生活習慣。其實+就是進行了運算子過載:decimal型別給許多運算子號進行了運算子過載.

運算子過載:必須是 publicstatic,有關鍵字標識 operator至少有一個引數和返回值的型別相同

public static decimal operator +(decimal d1, decimal d2);

我們自定義一個型別也實現運算子+過載:

class Salary
    {
        public decimal RMB { get; set; }
        public static decimal operator +(Salary left,decimal right)
        {
            left.RMB+=right;
            return left.RMB;
        }
    }

因為我平時不太有這方面的需求,但是也要習慣運算子過載。或許有的型別的設計可以進行優化。等會瞅瞅~~

 

相關文章