C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: vb.net 2008 構造体配列について教えてください


(過去ログ 95 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■57087 / inTopicNo.1)  vb.net 2008 構造体配列について教えてください
  
□投稿者/ みお (1回)-(2011/02/12(Sat) 21:04:59)

分類:[.NET 全般] 

VB.net 2008 windows7 pro

宣言
Public Structure gstructPaper
Dim P_No As string
End Structure

'配列の個数は50個とりたい
Public Structure gstructBase
Dim LotNo() As Integer
Dim Data() As gstructPaper
End Structure

'配列の個数は1000個とりたい
Public Structure gstructLotData
Dim Lot() As gstructBase
End Structure

'配列の個数は2個とりたい
Public gPlanData() As gstructLotData

  初期化と配列のサイズの宣言の仕方がわかりません
  Array.Clear(gPlanData, Nothing, 2)
Redim gPlanData(2)

'データのセット
gPlanData(i).Lot(j).Data(k).P_No="123"

  よろしくお願いします
引用返信 編集キー/
■57088 / inTopicNo.2)  Re[1]: vb.net 2008 構造体配列について教えてください
□投稿者/ shu (430回)-(2011/02/12(Sat) 22:05:45)
No57087 (みお さん) に返信

こんな感じかな

    Public Structure gstructPaper
        '--- 構造体の外からアクセス出来るということを分かりやすくするため
        '--- Publicで宣言、以下同様
        Public P_No As String
    End Structure

    Public Structure gstructBase
        Public LotNo() As Integer
        Public Data() As gstructPaper

        Public Sub New(ByVal Num As Integer)
            '--- どっちでもよい
            ReDim LotNo(Num - 1)
            Data = CType(Array.CreateInstance(GetType(gstructPaper), Num), gstructPaper())
        End Sub
    End Structure

    Public Structure gstructLotData
        Public Lot() As gstructBase

        Public Sub New(ByVal Num As Integer)
            Lot = CType(Array.CreateInstance(GetType(gstructBase), Num), gstructBase())
            For idx = 0 To Num - 1
                Lot(idx) = New gstructBase(50)
            Next
        End Sub
    End Structure



    '--- データのセット
    Dim gPlanData = CType(Array.CreateInstance(GetType(gstructLotData), 2), gstructLotData())

    For idx = 0 To 1
        gPlanData(idx) = New gstructLotData(1000)
    Next
    gPlanData(i).Lot(j).Data(k).P_No="123"




引用返信 編集キー/
■57089 / inTopicNo.3)  Re[2]: vb.net 2008 構造体配列について教えてください
□投稿者/ みお (2回)-(2011/02/12(Sat) 23:00:48)
ありがとうございます
目的のことはできました
Dim gPlanData = CType(Array.CreateInstance(GetType(gstructLotData), 2), gstructLotData())
の知識がなかったんで調べてみます


解決済み
引用返信 編集キー/
■57091 / inTopicNo.4)  Re[2]: vb.net 2008 構造体配列について教えてください
□投稿者/ よねKEN (676回)-(2011/02/13(Sun) 00:48:14)
No57088 (shu さん) に返信
> Data = CType(Array.CreateInstance(GetType(gstructPaper), Num), gstructPaper())

パフォーマンスを除いて動作上の問題があるわけではないですが、
Array.CreateInstanceメソッドを使わなくても以下のように普通にNewすればよいのでは?

Data = New gstructPaper(Num){}

引用返信 編集キー/
■57092 / inTopicNo.5)  Re[3]: vb.net 2008 構造体配列について教えてください
□投稿者/ みお (3回)-(2011/02/13(Sun) 03:44:47)
ありがとうございます

こちらの方がパフォーマンスいいんですね
参考になりました!!

shuさんよねKENさん
ありがとうございます
解決済み
引用返信 編集キー/
■57102 / inTopicNo.6)  Re[3]: vb.net 2008 構造体配列について教えてください
□投稿者/ shu (431回)-(2011/02/14(Mon) 08:13:11)
No57091 (よねKEN さん) に返信
> ■No57088 (shu さん) に返信
>> Data = CType(Array.CreateInstance(GetType(gstructPaper), Num), gstructPaper())
>
> パフォーマンスを除いて動作上の問題があるわけではないですが、
> Array.CreateInstanceメソッドを使わなくても以下のように普通にNewすればよいのでは?
>
> Data = New gstructPaper(Num){}
>

たしかにそうですね。初期化子は値指定がある場合にしか使ったことがなかったので抜けてました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -