2013-02-27 7 views
8

として表示されます。ほとんどの場合、これは正常に動作し、特定のサーバーでは「1(s)」と表示されます。列挙ToStringメソッドは、私が列挙</p> <pre><code>private enum TimeUnit { Day, Month, Year } </code></pre> <p>を持っていると私は説明を移入しています数

これはどうしてですか?

+3

私の推測では、.Netのさまざまなバージョンが実行されますか?あなたは単なるunit.ToString()を追加することでそれを解決します。 – Marthin

+1

私はこのディスプレイを違ったものにするのに興味を持っています。それが.NETバージョンの場合、変更されたのはいつですか?なぜですか? –

+1

@マースン私はおそらく.NETバージョン(私は質問に私の答えを入れたいとは思わなかった)が正しいと信じていますが、string.Concatは暗黙的なToString()を引き起こすはずです。書式設定情報を与えずに変更します。 – Liath

答えて

5

Enum.GetName()

を使用してみてください、それはまたsaferであるという利点を持っていますそれが必要なので:

  • 渡された値がnullではありません。
  • 渡された値は、列挙型が実際に基になる型または列挙型自体の型として実際に使用できる型の値です。値をGetTypeでチェックします。
+2

'enum'sをnullにすることはできません。その多くは統合失調症の安全です。 –

+0

フェアポイント、私はちょうどコピーして貼り付けた。今編集中。 – happygilmore

+0

私はこの修正を提出しました - 明らかに、正しいかどうかを知る前に、サーバーへの配備を待つ必要があります。 – Liath

0

Enumは文字列でoptionnalyexpressedデジタル列挙ですので(その別名を検討)

+2

はい、これは2つの異なるボックスが異なる方法でToString操作を実行する理由を説明していません。 – Liath

3

あなたはToStringを使用して、適切にフォーマットする必要があります。

return string.Concat(unit.ToString("F"), "(s)"); 
0

MSDN氏は述べています:一般的なフォーマット文字、 "G" は、指定された であるかのように

このメソッドは動作します。つまり、この 列挙型にFlagsAttributeが適用されておらず、このインスタンス の値に等しい名前付き定数がある場合、戻り値は定数の名前 を含む文字列です。 FlagsAttributeが適用され、 インスタンスの値と等しい1つ以上の名前付き定数の組み合わせが の場合、戻り値は、定数の名前の区切り文字で区切られた の文字列です。それ以外の場合、戻り値は インスタンスの数値の文字列表現になります。だから、理想的にあなたのケースで、それは(FlagsAttributeがが適用されていないと、このインスタンスの値に等しいという名前の定数がある考慮して)正常に動作する必要があります

。あなたは箱の違いについて言えますか?

また、明示的な数字を入力してください。

private enum TimeUnit 
{  
    Day = 1, 
    Month = 2, 
    Year = 3 
} 
+1

明示的な値を与えても違いはありません。 – Groo

+0

@Groo、私は同意します。しかし、MSDNの説明によれば、彼はケース3に入っているようです(そうでなければ、戻り値はこのインスタンスの数値の文字列表現です)。だから、単位変数が列挙型の範囲外の値を持っている可能性があります( '1(s) 'のように1が内部にあるべきですが)。情報が限られているので、それは推測です。 – publicgk

関連する問題