アプリ版:「スタンプのみでお礼する」機能のリリースについて

 下記のサンプルコードで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'です。
インスタンスを経由する共有メンバ、定数メンバ、列挙型メンバ、または入れ子にされた型へのアクセスです。正規の式は評価されません。

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

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

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

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

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

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

A 回答 (1件)

根本的な話として、変数 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では、これで警告が出なくなります。
    • good
    • 1
この回答へのお礼

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

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

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

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

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

お礼日時:2008/07/08 10:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!