11

私は列挙型を持っています

private enum TimeUnit
{      
  Day,
  Month,
  Year
}

そして、私は説明に次の情報を入力しています。

return string.Concat(unit, "(s)");

ここで、unitはTimeUnitです。ほとんどの場合、これは正常に機能し、「Days(s)」と表示されますが、特定のサーバーでは「1(s)」と表示されます。

これは何が原因でしょうか?

4

4 に答える 4

9

Enum.GetName()を使用してみてください

また、次のことが必要になるため、より安全であるという利点もあります。

  • 渡した値はnullではありません。
  • 渡した値は、列挙型が基になる型として実際に使用できる型、または列挙型自体の型です。これをチェックするために値にGetTypeを使用します。
于 2013-02-27T12:32:15.553 に答える
4

次を使用して適切にフォーマットする必要がありますToString

return string.Concat(unit.ToString("F"), "(s)");
于 2013-02-27T12:31:10.197 に答える
0

なぜならEnum、デジタル列挙オプションは文字列で表現されているからです(エイリアスと考えてください)

于 2013-02-27T12:30:57.660 に答える
0

MSDNは次のように述べています。

このメソッドは、一般的な書式文字 "G" が指定されているかのように機能します。つまり、FlagsAttribute がこの列挙型に適用されず、このインスタンスの値と等しい名前付き定数がある場合、戻り値は定数の名前を含む文字列になります。FlagsAttribute が適用され、このインスタンスの値と等しい 1 つ以上の名前付き定数の組み合わせがある場合、戻り値は定数の名前の区切り記号で区切られたリストを含む文字列です。それ以外の場合、戻り値はこのインスタンスの数値の文字列表現です。

したがって、理想的には、あなたの場合は正常に動作するはずです( FlagsAttribute が適用されておらず、このインスタンスの値に等しい名前付き定数があることを考慮してください)。ボックスの違いについて教えてください。

また、明示的な数値を指定してみてください。

private enum TimeUnit
{      
  Day = 1,
  Month = 2,
  Year = 3
}
于 2013-02-27T12:41:38.397 に答える