3

値を持つ列挙型があり、その列挙型を Nullable に設定しました。これは、MyEnum.NotAvilable 状態を追加したくないという事実によるものです。私の問題は、この列挙型を関数のパラメーターとして送信したときに始まります。次のメッセージが表示されます。

"The best overloaded method .."  

これは、列挙型が nullable であるためだと思います。機能する唯一のことは、列挙型を関数に送信するときに、列挙型を MyEnum にキャストするか、foo の署名を変更して MyEnum を受け入れるかどうかです。MyEnum ではありません。

列挙型が定義されています:

public MyEnum? Test

署名付きの関数の呼び出し: private void Foo(MyEnum value)

Foo(MyEnum value); // not working
Foo(MyEnum? value); // works  

私の質問は - Foo に送信する前に MyEnum にキャストするのは悪い習慣ですか?

if (value.HasValue)
    Foo((MyEnum) value); //this makes Foo(MyEnum value) valid 
4

3 に答える 3

3

の場合Nullable<T>HasValueプロパティとプロパティがありValueます。あなたのキャストは有効ですが、これもうまくいきます(そして私には良く見えます):

if (value.HasValue)
{
    Foo(value.Value);
}
于 2013-06-10T07:48:09.713 に答える
3

キャストする代わりに、 を渡す必要がありvalue.Valueます。Nullable 型には、Valuenull でない場合に備えて、実際の値を含むプロパティがあります。値が null のときにこのプロパティにアクセスしようとすると、例外が発生します。

于 2013-06-10T07:48:32.857 に答える