GetValues とGetNamesでenumが持つ全ての値をforeachで取得する場合、どちらが推奨されるのですか?
新人の方にenum
が持つ全ての値をforeach
で取得しようとしてたら、
エラーが出たと質問されました。
public enum TopCities
{
Tokyo,
Yokohama,
Osaka,
Nagoya,
Sapporo,
Kobe,
Kyoto
}
#endregion
#region Public Methods and Operators
public void LoopThroughAllTopCities()
{
foreach (string city in Enum.GetValues(TopCities))
{
ltlResult.Text += city + "\r\n";
}
}
#endregion
#region Methods
protected void Page_Load(object sender, EventArgs e)
{
LoopThroughAllTopCities();
}
#endregion
このエラーが出てコンパイルできないと聞かれました。
TopCities' is a 'type' but is used like a 'variable'
この場合Enum.GetValues
の引数はSystem.Type
なので、typeof(TopCities)
を渡すべきです。
foreach (var city in Enum.GetValues(typeof(TopCities)))
もしくは
foreach (var city in Enum.GetNames(typeof(TopCities)))
で都市名の取得もできますと答えました。
Enum.GetValues
とEnum.GetNames
の違いは指定した値を持つ指定した列挙体にある定数の名前を取得する代わりに、定数の値の配列を取得することです。
そこで思ったのですが、どのようなの場合にどちらのメソッドが推奨されるのかを聞きたいです。