- PR -

構造体の警告を消したい

1
投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-11-09 19:40
構造体を使ってみたのですが、次の警告が出ます。
でないように細工するにはどうすれば良いのですか?

dim item as UserListItem
item.Init(1, "田中一郎") ← ここで出る。
item.Init(2, "田中二郎")
____________________________________________________

警告
変数 'item' は、値が割り当てられる前に参照によって
使用されています。Null 参照の例外が実行時に発生す
る可能性があります。構造体、またはすべての参照メン
バが使用前に初期化されていることを確認してください。
____________________________________________________

Private Structure UserListItem
Public Code As Long
Public Name As String

Public Sub Init(ByVal code_ As Integer, ByVal name_ As String)
Code = code_
Name = name_
End Sub
End Structure
117
ベテラン
会議室デビュー日: 2005/05/09
投稿数: 94
お住まい・勤務地: 大阪府
投稿日時: 2005-11-09 19:52
UserListItem のインスタンスをnewで作ってないからでは?

[追記]
お節介とは思いますが,「警告が出ないように細工」てな発想は危ないです。
警告出るのはどこかにおかしい部分がある(可能性が高い)わけですから。
_________________
Future Is What We Are!

[ メッセージ編集済み 編集者: 117 編集日時 2005-11-09 19:59 ]
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-11-09 19:56
消えました。ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-09 21:28
Init という名前からしても初期化を行うわけですよね。
だとすれば、コンストラクタで強制すべきでしょう。
また、Code は Long なのに、Integer しか渡せないのも不自然です。

コード:

    Private Structure UserListItem
        Private _Code As Long
        Private _Name As String

        Public Sub New(ByVal code As Long, ByVal name As String)
            Me._Code = code
            Me._Name = name
        End Sub

        Public ReadOnly Property Code() As Long
            Get
                Return Me._Code
            End Get
        End Property

        Public ReadOnly Property Name() As String
            Get
                Return Me._Name
            End Get
        End Property

    End Structure


このようにして、

コード:

    Private Shared Sub OneMethod()
        Dim item1 As New UserListItem(1, "田中一郎")
        Dim item2 As New UserListItem(1, "田中次郎")
                :
                :
    End Sub


とすべきですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-11-11 13:53
>init という名前からしても初期化を行うわけですよね。

そうです。

>だとすれば、コンストラクタで強制すべきでしょう。

そうですね。その方がわかりやすくて統一感もありますよね。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)