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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
VB.NETで小数点以下の桁数を取得したい
その他(ソフトウェア)
-
VB.NETで、DLLを頂いたんですが・・
Visual Basic(VBA)
-
-
4
VB.net 任意の例外を発生させるには・・・
Visual Basic(VBA)
-
5
asp.NET初心者です。「 ’Context’は’○○○’のメンバで
Microsoft ASP
-
6
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
7
遅延バインディングの回避方法
Visual Basic(VBA)
-
8
DataSetから、DataTableを取得したい。
C言語・C++・C#
-
9
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
10
VB.NETでフォーム上にExcelのような表を表示する方法
Visual Basic(VBA)
-
11
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
12
この行は既に別のテーブルに属しています
Visual Basic(VBA)
-
13
CloseとDisposeの違い
Visual Basic(VBA)
-
14
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
15
DataGridViewに複数テーブルのデータをセットしたい
Visual Basic(VBA)
-
16
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
17
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
18
VB.NETで、配列をテーブルに変換して表示する。
Visual Basic(VBA)
-
19
Winmerge ファイルの中身は同じなのに黄色くなる
その他(OS)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
動的配列が存在(要素が有る)か...
-
EXCEL VBA で、0から?1から?
-
VBAで配列の計算
-
変数を動的に作るには?
-
配列の要素数を超えた参照のコ...
-
パソコンキーボードで時分秒を...
-
javaプログラムについて
-
排列と配列の漢字の使い分けは
-
複数のテキストボックスに同じ...
-
C言語 重複しない4ケタの乱数...
-
コントロールが配列かどうかを...
-
For文と配列
-
遅延バインディングを使用でき...
-
空き番号探し
-
ランダムに並んでるキーボード...
-
五目並べのプログラムを配列と...
-
VB.net 引数で配列変数を渡す際...
-
ジャバスクリプトについて。
-
ボタンの複数割り当てについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで配列の計算
-
パソコンキーボードで時分秒を...
-
IF関数でEmpty値を設定する方法。
-
EXCEL VBA で、0から?1から?
-
変数を動的に作るには?
-
動的配列が存在(要素が有る)か...
-
VB.net 引数で配列変数を渡す際...
-
遅延バインディングを使用でき...
-
VBで作った乱数を一度も重複さ...
-
複数のテキストボックスに同じ...
-
配列の要素数を超えた参照のコ...
-
C言語 重複しない4ケタの乱数...
-
For文と配列
-
C#の質問
-
VBでbyte配列型のインスタンス...
-
Excel VBAで配列の途中から(X)M...
-
マップチップの当たり判定の出し方
-
ジャグ配列とは
-
五目並べのプログラムを配列と...
-
10進数を4桁のバイト配列に格納...
おすすめ情報