![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
VB.NETで小数点以下の桁数を取得したい
その他(ソフトウェア)
-
VB.net 任意の例外を発生させるには・・・
Visual Basic(VBA)
-
-
4
asp.NET初心者です。「 ’Context’は’○○○’のメンバで
Microsoft ASP
-
5
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
6
DataSetから、DataTableを取得したい。
C言語・C++・C#
-
7
VB.NETで、DLLを頂いたんですが・・
Visual Basic(VBA)
-
8
VB.NETでフォーム上にExcelのような表を表示する方法
Visual Basic(VBA)
-
9
VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?
Visual Basic(VBA)
-
10
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
11
この行は既に別のテーブルに属しています
Visual Basic(VBA)
-
12
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
13
遅延バインディングの回避方法
Visual Basic(VBA)
-
14
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
15
DataGridViewに複数テーブルのデータをセットしたい
Visual Basic(VBA)
-
16
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
17
VB.NETで、配列をテーブルに変換して表示する。
Visual Basic(VBA)
-
18
Winmerge ファイルの中身は同じなのに黄色くなる
その他(OS)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
応用情報技術者試験の令和元年...
-
VBで作った乱数を一度も重複さ...
-
VBAで配列の計算
-
IF関数でEmpty値を設定する方法。
-
複数のテキストボックスに同じ...
-
C言語 重複しない4ケタの乱数...
-
パソコンキーボードで時分秒を...
-
動的配列が存在(要素が有る)か...
-
EXCEL VBA で、0から?1から?
-
VB.net 引数で配列変数を渡す際...
-
【MFC】GetCount()とGetSize()...
-
マージソートについて
-
MicroSoft BasicのDim文とVisua...
-
Excel VBA 多段階配列の宣言の仕方
-
C言語のread関数に関するファイ...
-
動的配列と固定長配列の違いに...
-
変数を動的に作るには?
-
ジャグ配列とは
-
配列プロパティをREDIMする方法...
-
For文と配列
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
変数を動的に作るには?
-
VB.net 引数で配列変数を渡す際...
-
動的配列が存在(要素が有る)か...
-
VBで作った乱数を一度も重複さ...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
C言語 重複しない4ケタの乱数...
-
javaプログラムについて
-
C#の質問
-
Visual C++ でコントロールを...
-
遅延バインディングを使用でき...
-
Excel VBAで配列の途中から(X)M...
-
排列と配列の漢字の使い分けは
-
For文と配列
-
VBでbyte配列型のインスタンス...
-
C言語で3次元配列の課題をして...
おすすめ情報