
VB.Net の初学者です。
Sub Main() でのデータ型、演算子、式等の確認をしているレベルです。
今回の質問は、ArrayList の疑似的な2次元配列でのエラーの回避要領についてです。
'Option Strict On
' ==============================
' FileReadToArrayLists のテスト
' ==============================
Sub Main()
Dim aAttachs As New ArrayList
FileReadToArrayLists("D:\Temp\付属一覧.csv", aAttachs)
Debug.Print(aAttachs(0)(0))
Debug.Print(aAttachs(0)(1))
Debug.Print(aAttachs(0)(2))
Debug.Print(aAttachs(0)(3))
End Sub
[イミディエイト ウインドウ]
品番001
品番001用付属1
品番001用付属2
品番001用付属3
==========================================================
Option Strict On では遅延バインディングを使用できません!
==========================================================
>Array には複数の次元を指定できますが、
>ArrayList または List<(Of <(T>)>) の次元は常に 1 次元です。
「もし、もしではあるが、配列そのものをリストの項目としたら・・・」
「それも 1 次元じゃーないか・・・」
と、考えたまでは良かったのですが・・・。
上記のエラーの回避要領がわかりません。
No.2ベストアンサー
- 回答日時:
>「厳密に!」を重視して
嬉しいねぇ
>List コレクション型では成功しましたがArrayList コレクション型では失敗。この辺りは、どうなんでしょうか?
んー、C#にはArrayList<T>ってのは無いんだよね。
List<T>とかArrayListはあるけど。
Javaは逆にArrayList<T>はあるけど
List<T>ってのはインターフェースであって
クラスじゃない(ちなみにC#のインターフェースはIList<T>)
#ただ単にライブラリ製作者の名前の付け方の考え方が違うだけだと思う。
>「厳密に!」を重視して
嬉しいねぇ
意味ありげなoptionを書かれれば・・・。
しかし、全てのプロジェクトを消して40日のメモを見てのやり直し。
結構、大変でした。
しかし、型の理解に関する中途半端さを思い知ることができました。
#ただ単にライブラリ製作者の名前の付け方の考え方が違うだけだと思う。
ここで決着します。
いずれにしろ、List を使えば良いわけですから・・・。
ありがとうございました。
No.1
- 回答日時:
うん、やっぱり一発で何が聞きたいか読み取れない
>「もし、もしではあるが、配列そのものをリストの項目としたら・・・」
>「それも 1 次元じゃーないか・・・」
そこまでは問題ないんじゃないの?
http://oshiete1.goo.ne.jp/qa4752021.html
の時はそういうつもりで書いているし。
これかなあ…聞きたいのって。
===========
何故エラーになるのか:
http://msdn.microsoft.com/en-us/library/system.c …
戻り値がObjectであって,配列やArrayListじゃないから,
自分で変換しないといけない。
Option Explicit On
Option Strict On
Option Compare Binary
Option Infer Off
Class Q4781160
Shared Sub Main()
Dim x As System.Collections.ArrayList
Dim y As String() = {"その1","その2"}
x = New ArrayList()
x.Add(DirectCast(y,Object)) '実際には継承元にはDirectCastを使わなくて良い
System.Console.WriteLine(DirectCast(x(0),String())(0))
System.Console.ReadKey(True)
'でいちいち変換するのが嫌だから
Dim z As System.Collections.Generic.List(Of String())
z = new System.Collections.Generic.List(Of String())()
z.Add(y)
System.Console.WriteLine(z(0)(0))
'というような構文が.NET 2.0から導入されたわけ。
'
End Sub
End Class
'という風に。Q4752021でもこの構文を使っている。
' =================================
' FileReadToArrayLists のテスト2
' =================================
Module theFileReadToArrayLists
Sub Main()
On Error Resume Next
Dim I As Integer
Dim N As Integer
Dim aAttachs As New ArrayList
FileReadToArrayLists("D:\Temp\付属一覧.csv", aAttachs, , True)
Debug.Print(DirectCast(aAttachs.Item(1), String())(0))
Debug.Print(DirectCast(aAttachs.Item(1), String())(1))
Debug.Print(DirectCast(aAttachs.Item(1), String())(2))
Debug.Print(DirectCast(aAttachs.Item(1), String())(3))
End Sub
End Module
[イミディエイト ウインドウ]
品番001
品番001用付属1
品番001用付属2
品番001用付属3
成功しました。
ここ5日間は、ともかく回答にある「厳密に!」を重視して40日の演習を全てやり直しました。
その中で、質問にあるエラーに遭遇しました。
そうして、質問に至った次第です。
>戻り値がObjectであって,配列やArrayListじゃないから・・・
ここまでは気が付きましたが・・・。
しかし、其の先の何がなにやらサッパリでした。
「奇を衒った関数を作ったのが誤り」という結論で納得しつつありました。
そういう意味では、本当にありがとうございます。
なお、十分には理解してはいませんが、疑似的2元配列ですと BinarySearch メソッドに使えるようです。
そういう意味でも、本当にありがとうございます。
>'でいちいち変換するのが嫌だから
>Dim z As System.Collections.Generic.List(Of String())
>z = new System.Collections.Generic.List(Of String())()
>z.Add(y)
>System.Console.WriteLine(z(0)(0))
>'というような構文が.NET 2.0から導入されたわけ。
この回答は、真っ先に試しました。
しかし、 List コレクション型では成功しましたがArrayList コレクション型では失敗。
この辺りは、どうなんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
このQ&Aを見た人はこんなQ&Aも見ています
-
変数の参照でエラーが出てしまいます。(VB.NET)
Visual Basic(VBA)
-
FriendとPublicの違い。。。
Visual Basic(VBA)
-
VB.NETでのイベントの途中終了
Visual Basic(VBA)
-
-
4
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
5
vb.netです。2次元配列の要素をFor Eachでひとつづつ取得したい。
Visual Basic(VBA)
-
6
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
7
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
8
GROUP BYを行った後に結合したい。
Oracle
-
9
型 varchar から型 numeric への変換エラー。
その他(データベース)
-
10
textboxユーザーコントロールのコピー&ペースト制御
Visual Basic(VBA)
-
11
VB.NET でのLaod/unLoad について
Visual Basic(VBA)
-
12
VB.NETで縦書表示をしたいのですが可能でしょうか。
Visual Basic(VBA)
-
13
指定された引数が有効範囲にないエラー(VB.NET)
Visual Basic(VBA)
-
14
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
15
文字列の後ろから必要分だけ削除したい。
Visual Basic(VBA)
-
16
Functionで戻り値を複数返す方法
Visual Basic(VBA)
-
17
遅延バインディングの回避方法
Visual Basic(VBA)
-
18
Functionの戻り値を配列にしたいのですが
Visual Basic(VBA)
-
19
VB.NET2003 テキストボックスに半角英数字以外入力させない
Visual Basic(VBA)
-
20
2次元動的配列の第一引数のみを可変にする
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
EXCEL VBA で、0から?1から?
-
VBAで配列の計算
-
C言語 重複しない4ケタの乱数...
-
VB.net 引数で配列変数を渡す際...
-
変数を動的に作るには?
-
C#の質問
-
VBでbyte配列型のインスタンス...
-
VBで作った乱数を一度も重複さ...
-
javaプログラムについて
-
配列の要素数を超えた参照のコ...
-
For文と配列
-
複数のテキストボックスに同じ...
-
Excel VBAで配列の途中から(X)M...
-
ラジオボタンのチェックをEnter...
-
遅延バインディングを使用でき...
-
ジャグ配列とは
-
int型配列の一括初期化
おすすめ情報