2017年11月15日 星期三

C# - 列舉的 if 寫法


從 Delphi 以來都有用列舉的習慣,
在 Delphi 有 in 可以用,就像 SQL 中的 in 的用法一樣;

但是在 C# 中沒有 in 可以用,只能在 if 中寫的落落長的東西,例如:

if (currentCar == Cars.Taxi || currentCar == Cars.Bus || currentCar = MRT)

如果要判斷很多 if 就會很長很長又很長....

所以某天想到可以用泛型來處理,程式如下:

        public static bool InValueSet<T>(T compareValue, T[] valueSet)
        {
            foreach (T baseValue in valueSet)
            {
                if (compareValue.Equals(baseValue))
                    return true;
            }

            return false;
        }

所以上面的 if 就可以變成下面這樣的寫法,如下:

if (InValueSet<Cars>(currentCar, new Cars[] {Cars.Taxi, Cars.Bus, Cars.MRT})

然後可以宣告一個集合,如下:

Cars[] MassTransport = new Cars[] {Cars.Taxi, Cars.Bus, Cars.MRT}

然後就可以改成如下寫法:

if (InValueSet<Cars>(currentCar, MassTransport)

這樣就簡潔多了,舒坦............


沒有留言:

張貼留言