新人の方に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.GetValuesEnum.GetNamesの違いは指定した値を持つ指定した列挙体にある定数の名前を取得する代わりに、定数の値の配列を取得することです。

そこで思ったのですが、どのようなの場合にどちらのメソッドが推奨されるのかを聞きたいです。