一千萬個為什麽

搜索

在枚舉中查找最高值

我正在寫一個方法,它決定了.NET枚舉中的最高值,所以我可以為每個枚舉值創建一個BitArray:

pressedKeys = new BitArray(highestValueInEnum());

我需要這兩個不同的枚舉,所以我把它變成一個通用的方法:

/// 
Returns the highest value encountered in an enumeration
/// 
///   Enumeration of which the highest value will be returned
/// 
/// The highest value in the enumeration
private static int highestValueInEnum() {
  int[] values = (int[])Enum.GetValues(typeof(EnumType));
  int highestValue = values[0];
  for(int index = 0; index < values.Length; ++index) {
    if(values[index] > highestValue) {
      highestValue = values[index];
    }
  }

  return highestValue;
}

正如你所看到的,我將Enum.GetValues()的返回值轉換為int [],而不是EnumType []。這是因為我不能將EnumType(這是一個泛型類型參數)強制轉換為int。

代碼起作用。但它有效嗎? 我能否總是將Enum.GetValues()的返回值轉換為int []?

最佳答案

不,您無法安全地轉換為 int [] 。枚舉類型並不總是使用 int 作為基礎值。如果你限制自己的枚舉類型的有一個基礎類型的 int ,它應該沒問題。

這感覺就像你(或我)可以擴展無約束旋律來支持,如果你想 - 在編譯時真正將類型限制為枚舉類型,並為任何枚舉類型工作,甚至包含 longULONG </代碼>。

如果沒有Unconstrained Melody,您仍然可以通過使用所有枚舉類型有效地實現 IComparable 的適當方式來實現。如果你使用.NET 3.5,它是一個單線程:

private static TEnum GetHighestValue() {
  return Enum.GetValues(typeof(TEnum)).Cast().Max();
}

轉載註明原文: 在枚舉中查找最高值