DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字列(string)から構造体へ変換

環境/言語:[VB.NET 2003]
分類:[.NET]

文字列操作についてご質問したいことがありますのでよろしくお願いいたします

現在特定の文字列をそれぞれの項目に分解し、構造体に割り当てる処理を
考えています。普通にMid関数を使用すれば実現できるのですが、
さまざまな文字列に対して分解処理を実装するのは冗長だと思っています。

そこで構造体のメンバとして分解する項目ごとにChar型配列を定義して
文字列を構造体にキャストするような操作ができないのと
普通にCtypeでキャストするとコンパイルエラーになります。

ネットで調べたところ構造体宣言時に属性を使用して要素数を決定し
(固定長配列)APIを使用することで上記のことが実現できているようです。
(RtlMoveMemoryを使用)

上記以外の方法として.Net FrameWorkで提供されている関数で実現することはできないのでしょうか??(できるだけ簡単な方法で実現したいと思っているため)

いろいろ調べてマーシャリングが関係するところまでは行き着いたのですが、
なかなか方法をみつけだすことができません。

何か実現方法等がありましたら教えてください。
申し訳ございませんがよろしくお願いいたします。
書かれた方法については詳しくありませんが、
コンストラクタやParseメソッドのほうが自然ではないでしょうか?
Dim newStruct As New MyStruct(sourceString)
Dim newStruct As MyStruct = MyStruct.Parse(sourceString)


また、構造体である必要が無いならクラスでもいいと思います。

「クラスまたは構造体の選択」
http://msdn2.microsoft.com/ja-jp/library/ms229017(VS.80).aspx
> 現在特定の文字列をそれぞれの項目に分解し、構造体に割り当てる処理を
> 考えています。普通にMid関数を使用すれば実現できるのですが、
> さまざまな文字列に対して分解処理を実装するのは冗長だと思っています。

方法としてはそのやり方が素直で簡単だと思います。
構造体ごとに入れ方が違う以上、単純には一般化できないでしょう。

ただ、その処理は、構造体の外側で記述するのではなく、
構造体のメソッドとして実装すべきでしょうね。
この辺は既にまどかさんが指摘されているように
コンストラクタを作るか、Parseメソッドを用意するなどの方法がよいでしょう。
(Integer等の組み込みの構造体ではそれぞれでParseメソッドという名前のメソッドを実装しています)

DOBON.NET | プログラミング道 | プログラミング掲示板