プロが教える店舗&オフィスのセキュリティ対策術

VB.net 教えてgoo ともに初心者です
至らぬ点はご容赦ください。

前提として
動作環境はWindows7
Visual Studio2013とInputman8.5Jでクライアントを構築しています。
IBMのMQを使ってホストと電文データをやり取りするシステムです。

下記マイクロソフトのサイトに、Type.GetFieldsメソッドの説明で以下のように記載があります。
https://msdn.microsoft.com/ja-jp/library/aa33246
「GetFields メソッドから返されるフィールドは、アルファベット順や宣言順などの特定の順序で返されるわけではありません。したがって、フィールドが返される順序に依存するようなコードは避ける必要があります。」

上記、返されるフィールドの順序ですが、これが変化する条件が知りたいです。


ホストから受けた電文データをType.GetFieldsメソッドを使って構造体に格納し、処理をします。
電文データの先頭から、定義体で指定した各項目のサイズ分を構造体に格納していく、というロジックですが、特定の1機能だけランダムなタイミングで電文データがバラバラの状態で格納されることがあります。

上記構造は共通処理化しており、約170箇所で使用していますが、現在のところ上記現象が起こるのは対象の1機能のみです。
返されるフィールドの順序が変化する条件を特定し、何とか対応を限定できないかと考えております。
お知恵を貸してください。

A 回答 (1件)

直接の回答は持ち合せていません。



「フィールドが返される順序に依存するようなコードは避ける必要があります。」

とあるのだから、別の方法を考えるべきでは?


フィールド名の順番をStringの配列 FieldNameList に入れておいて
For each fieldName as String in FieldNameList
 datatype.GetField(fieldName)
等と、GetFieldで順番に処理するとか。

GetFieldsで得た配列をソートするとか。


https://oshiete.goo.ne.jp/qa/9704214.html
で、Microsoftに聞こうとしてますが、問合せできたとしても「固定する方法」は教えてくれないと思います。
「原理的に、制御不可能だということが明確になった」なんてこともあるかも。
    • good
    • 0
この回答へのお礼

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

おっしゃる通りだと思います。

ただ対応範囲があまりに広く、テストまで考えるとなんとか対応範囲を限定できないか、とあがいておりました。

対応方針を変えようと思います。

どうもありがとうございました。

お礼日時:2017/04/07 13:05

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