こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

整数の引数に列挙を使ったとき

 下記のサンプルコードでVB2003のときは警告が出なかったのですが、VB2008では警告が出ます。(注!インデントに全角スペース使用)

Private aryNames(5) As String

Private Enum enmItem As Integer
 eName1 = 0
 eName2
 eName3
End Enum

Private Sub Form1_Load(…
 Dim i As Integer
 Dim en As enmItem
 '列挙を使って代入する
 Item(en.eName2) = "DATA2"
 Item(en.eName3) = "DATA3"
 Item(en.eName1) = "DATA1"
 'リストボックスで確認
 For i = 0 To 2
  ListBox1.Items.Add(aryNames(i))
 Next
End Sub

Private Property Item(ByVal idx As Integer) As String
 Get
  Return aryNames(idx)
 End Get
 Set(ByVal Value As String)
  aryNames(idx) = Value
 End Set
End Property

警告
使用されないローカル変数'en'です。
インスタンスを経由する共有メンバ、定数メンバ、列挙型メンバ、または入れ子にされた型へのアクセスです。正規の式は評価されません。

 いちおう警告だけで期待通りの動きはするのですが、そんなに不正なコーディングでもないのに警告がでるのはうっとうしいです。

 かといて警告オプション・・・

 未使用のローカル変数 なし
 共有メンバにアクセスするインスタンス変数 なし

・・・とするのも何だかなあ~ て感じです。

 これは、安全なコーディングのため仕様が変わったせいなのでしょうか。 警告オプションをそのままに、上記の警告が出ないようにできないものでしょうか。

以上、よろしくお願いします。

投稿日時 - 2008-07-08 09:12:05

QNo.4159962

困ってます

質問者が選んだベストアンサー

根本的な話として、変数 en は不要です。
列挙体の内容を使用する際に、そのインスタンスは不要です。
列挙体は、ある意味 定数みたいなものなので。
プロパティ定義の引数とかで使用する場合は、変数としての定義は
必要ですが。
> Dim en As enmItem
の行を消して、
> Item(en.eName2) = "DATA2"
> Item(en.eName3) = "DATA3"
> Item(en.eName1) = "DATA1"
を、
 Item(enmItem.eName2) = "DATA2"
 Item(enmItem.eName3) = "DATA3"
 Item(enmItem.eName1) = "DATA1"
に変更してみてください。
少なくともVS2005では、これで警告が出なくなります。

投稿日時 - 2008-07-08 09:35:06

お礼

すばやい回答ありがとうございます。

>そのインスタンスは不要です。

さっそくソースを変更したら、警告はでなくなりました。
ところで、列挙をインスタンス化した目的は長い名前を短くしたかったこともありました。

実際にはこんな感じになりました。
mSpec.Item(enmMySpecItemDat.eDataName) = Me.tbxDataName.Text
mSpec.Item(enmMySpecItemDat.eWorkName) = Me.tbxWorkName.Text
...

まあ、「コピペ」するのでそんな手間でもないんですが~。

投稿日時 - 2008-07-08 10:18:04

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)