- PR -

型変換について

1
投稿者投稿内容
もんた
常連さん
会議室デビュー日: 2005/05/19
投稿数: 20
投稿日時: 2005-05-23 14:44
VB.NETで
varParameterValues = New Object() {New Object() {60, 70, 80}, New Object() {"AAA", "BBB", "CCC"}, New Object() {"DDD", "EEE", "FFF"}}
のような入れ子の配列がります。

varParameterValues(0)--->integer型
varParameterValues(1)--->string型
varParameterValues(2)--->string型
ように、行全体を型変換したいのですが

どのようにしたら、よろしでしょうか?

基本的なことですが、よろしくお願いします。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-05-23 16:42
こんにちは、じゃんぬ です。

引用:

varParameterValues = New Object() {New Object() {60, 70, 80}, New Object() {"AAA", "BBB", "CCC"}, New Object() {"DDD", "EEE", "FFF"}}
のような入れ子の配列がります。


どういう経緯で、このようなデータが出来上がって、
どのように利用されるか判らないので何とも言えませんが...
(何故に Object() なんだろう?)

引用:

varParameterValues(0)--->integer型
varParameterValues(1)--->string型
varParameterValues(2)--->string型
ように、行全体を型変換したいのですが
どのようにしたら、よろしでしょうか?


型変換じゃないけど、varParameterValue を Array() としておけば
CopyTo メソッドなんかで各配列にはコピーはできます。
ArrayList とか使った方が良いかもしれません。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
もんた
常連さん
会議室デビュー日: 2005/05/19
投稿数: 20
投稿日時: 2005-05-23 17:54
ありがとうございます。

HELPを見てるんですが、
copytoの使い方がいまいちです。
質問した配列の例のように
copytoを使って、
配列の入れ子をのつくり方を
教えてもらえないでしょうか?

入れ子にするのは、関数の引数を
ひとつにするためです。

超基本的なことですいません。

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-05-23 18:12
引用:

しゅうちゃんさんの書き込み (2005-05-23 17:54) より:
入れ子にするのは、関数の引数を
ひとつにするためです。


関数の引数を一つに纏めたいなら、もう少しVB.NETらしいやり様があるだろう?クラスに格納するとかさ・・・。

それから、むやみやたらにObjectにキャストするのは控えよう。コードの保守性を著しく下げるからね。メソッドを呼ぶために逐一キャストしなくてはならないし、キャストするために何型を格納したのか意識しなくてはならないし、どんな型でも格納しうるから後でバグの温床にもなる。

引用:

CopyToを使って、
配列の入れ子をのつくり方を
教えてもらえないでしょうか?


Array.CopyToは単に1次元配列のコピーを行うだけのメソッド。
したがって、コピー先となるインスタンスは事前に作成しておく必要がある。

つまり、CopyToを使う前に配列の入れ子を作っておく必要があるでしょうね。したがってCopyToを使って配列の入れ子を作ると言うのは、話に無理がある。

入れ子になっている配列にデータをコピーして初期化するためにCopyToを使うと言うなら、話も判るけど。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-05-23 18:22
こんにちは、じゃんぬ です。

引用:

入れ子にするのは、関数の引数を
ひとつにするためです。


やっぱり... (^-^;)
構造体とかクラスを使ってください。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
もんた
常連さん
会議室デビュー日: 2005/05/19
投稿数: 20
投稿日時: 2005-05-23 18:51
アドバイスありがとうございます。

馬鹿の質問で申しわけありませんが、
構造体とかクラスで引数となりうる
データ、2次元のデータで何行、何列の
どういうデータ型か
関数が呼ばれて見ないと
わからないのです。

それでも、構造体なりクラスで可能ですか?
もし可能なら、クラスで実装する場合の
キーワードを教えてもらえませんか?




Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-05-23 19:02
諸農です。

引用:

構造体とかクラスで引数となりうる
データ、2次元のデータで何行、何列の
どういうデータ型か
関数が呼ばれて見ないと
わからないのです。



コレクションとかリストとかをhas-aで
実装したクラスっていうのはダメですか?

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-05-23 20:00
コード:

Dim varParameterValues() As Object
varParameterValues = New Object() {New Object() {60, 70, 80}, New Object() {"AAA", "BBB", "CCC"}, New Object() {"DDD", "EEE", "FFF"}}

Dim list As ArrayList = New ArrayList(DirectCast(varParameterValues(0), System.Collections.ICollection))
Dim intArray As Integer() = list.ToArray(GetType(Integer))

list = New ArrayList(DirectCast(varParameterValues(1), System.Collections.ICollection))
Dim strArray1 As String() = list.ToArray(GetType(String))

list = New ArrayList(DirectCast(varParameterValues(2), System.Collections.ICollection))
Dim strArray2 As String() = list.ToArray(GetType(String))



こんな感じで一括変換できますが、配列の型を毎回調べないといけないですし
intArray , strArray1 , strArray2 などは定義しておけないですし。。。
二次元データならDataTable使うとか、自作クラス使うか、検討したほうがよさそうですね。

[ メッセージ編集済み 編集者: burton999 編集日時 2005-05-23 20:01 ]
1

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