私は列挙型を持っています
private enum TimeUnit
{
Day,
Month,
Year
}
そして、私は説明に次の情報を入力しています。
return string.Concat(unit, "(s)");
ここで、unitはTimeUnitです。ほとんどの場合、これは正常に機能し、「Days(s)」と表示されますが、特定のサーバーでは「1(s)」と表示されます。
これは何が原因でしょうか?
Enum.GetName()を使用してみてください
また、次のことが必要になるため、より安全であるという利点もあります。
次を使用して適切にフォーマットする必要がありますToString
。
return string.Concat(unit.ToString("F"), "(s)");
なぜならEnum
、デジタル列挙オプションは文字列で表現されているからです(エイリアスと考えてください)
MSDNは次のように述べています。
このメソッドは、一般的な書式文字 "G" が指定されているかのように機能します。つまり、FlagsAttribute がこの列挙型に適用されず、このインスタンスの値と等しい名前付き定数がある場合、戻り値は定数の名前を含む文字列になります。FlagsAttribute が適用され、このインスタンスの値と等しい 1 つ以上の名前付き定数の組み合わせがある場合、戻り値は定数の名前の区切り記号で区切られたリストを含む文字列です。それ以外の場合、戻り値はこのインスタンスの数値の文字列表現です。
したがって、理想的には、あなたの場合は正常に動作するはずです( FlagsAttribute が適用されておらず、このインスタンスの値に等しい名前付き定数があることを考慮してください)。ボックスの違いについて教えてください。
また、明示的な数値を指定してみてください。
private enum TimeUnit
{
Day = 1,
Month = 2,
Year = 3
}