質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

31280閲覧

VB.netで構造体配列の各要素を一括で初期化したい。

HidehiroOgata

総合スコア15

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/05/22 22:16

お世話になります。
構造体配列の初期化で困っています。
以下内容

Public Structure MES_DATA_STRUCTURE
Public Tc As Double
Public Vp As Double
Public Vc As Double
Public Id As Double
End Structure
という構造体があったとして

Public mes_data(100) As MES_DATA_STRUCTURE
を宣言したとします。全ての要素データを-999で初期化する場合
FOr文を使わずに、書く事は可能でしょうか。
(1つ1つ要素を指定して初期化しないという意味です。)
実際、構造体の要素数は30個ぐらいあり、For文で書くのは結構
大変です。(要素数が増えたら間違えそう)

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

リフレクションを使うというのはどうでしょう?

リフレクションを使って構造体フィールドに値を設定する(FieldInfo.SetValue) - Programming/.NET Framework/Tips - 総武ソフトウェア推進所

■追記:サンプルコード

VB

1Imports System 2Imports System.Reflection 3 4Public Class Test 5 Public Shared Sub Main() 6 Dim s As new MES_DATA_STRUCTURE 7 Dim v As ValueType = s 8 Dim fieldInfo() As FieldInfo = s.GetType().GetFields( _ 9 BindingFlags.Instance Or BindingFlags.Public) 10 For Each f As FieldInfo In fieldInfo 11 f.SetValue(v, -999) 12 Next f 13 Console.WriteLine(s.Tc) ' 初期化されて「-999」が出力される 14 End Sub 15End Class 16 17Structure MES_DATA_STRUCTURE 18 Public Tc As Double 19 Public Vp As Double 20 Public Vc As Double 21 Public Id As Double 22End Structure

投稿2016/05/23 07:45

編集2016/05/23 08:20
tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HidehiroOgata

2016/05/24 01:12

まさに、こういうやり方をさがしていました。ありがとうございます。いろいろ、ご意見いただいた方も、参考にさせていただきます。みなさまありがとうございました。
guest

0

大本のやりたいこととして、値がセットされているかどうかを区別したいのだとすれば、
それを通常ではありえない値(-999)を初期値とすることで実現するのではなく、
Nullableを使うのも手だと思います。

投稿2016/05/23 07:44

ozwk

総合スコア13528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

勘違いでウソついてましたすみません。

構造体ではなくクラスであれば下記の方法でうまくいきます。


初期化漏れが怖いならこの方法でもよいかと思います。

VB.net

1Public Structure MES_DATA_STRUCTURE 2 Public Tc As Double = -999 3 Public Vp As Double = -999 4 Public Vc As Double 5 Public Id As Double = -999 6 End Structure

このように漏れが出てもわかりやすいです。

投稿2016/05/23 01:06

編集2016/05/23 06:49
iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2016/05/23 04:13

Constならともかく、Publicでは無理じゃないですか?
ttyp03

2016/05/23 07:10

そうなんですよ。 エラーにはならないんですよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問