1

私はこうして列挙型を持っています:

Enum CurrentPeriodType
   CurrentDate
   Sales
   Utilization
End Enum

私はこのように機能を持っています:

Private Sub PopulateDDLPeriods(currentPeriodType As CurrentPeriodType)

...

End Sub

私はこのように関数呼び出しを行います:

PopulateDDLPeriods(False)

私はそれを実行し、コンパイルして実行し、コードをステップ実行します。実際、関数呼び出しから ENUM を必要とする関数に移行しています。オーバーロードがあるのではないかと思いました...しかし、実際にコードをステップ実行すると、ENUMパラメーター型の関数に入りました...

は?

4

2 に答える 2

2

これは、Option Strictオフになっているためにのみ可能です。表示される動作が気に入らない場合は、オンにします。ただし、これを行うとOption Explicit、すべての変数を宣言する必要があり、データ型を指定する必要があることEnum意味します。

あなたの場合、の内部値はCurrentDateです0。したがって、 が 0 と列挙型に変換できることOption Strictは (オフであることを考えると) それほど驚くことではありません。False

さらに驚くべきことは、次のように変更した後でも、コードがコンパイルおよび実行されることです。

Enum CurrentPeriodType
   CurrentDate = 1
   Sales = 2
   Utilization = 3
End Enum

あるいは、True(-1 に変換される) を渡し始めた場合。

ご覧のとおり、.NET 列挙型は、それぞれの基になるデータ型の「部分的に列挙された」シノニムにすぎず、少し試してみれば、そのようなデータ型の任意の値を取得できます。

于 2012-07-02T16:49:37.800 に答える
1

まず、関数で Enum を使用するのに、ブール値を指定するのはなぜですか?

何が起こっているかというと、ブール値が 0 として評価され、Sales Enum 値が得られます。関数呼び出しのパラメーターを True に切り替えると、実際には Enum から -1 として評価されます。

この状況でおそらく役立つことの 1 つは、列挙型の値を明示的に追加することです (CurrentDate = 0、Sales = 1 など)。その関数を呼び出すときは、異なる型の変数を指定するのではなく、パラメーターが有効な Enum であることを確認してください。

于 2012-07-02T11:53:51.263 に答える