• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:遅延バインディングを使用できません!の回避方法?)

遅延バインディングを使用できません!の回避方法

このQ&Aのポイント
  • VB.Net の初学者です。ArrayList の疑似的な2次元配列でのエラーの回避要領についてお知りになりたいです。Option Strict On では遅延バインディングを使用できません。ArrayList または List の次元は常に 1 次元であるため、遅延バインディングを回避する方法について考えています。
  • 遅延バインディングを使用できません!Option Strict On ではArrayList または List の次元は常に 1 次元であるため、エラーを回避する方法について教えてください。ArrayList の疑似的な2次元配列を使用しているので、具体的なコード例も教えていただけると助かります。
  • VB.Net の初学者です。ArrayList の2次元配列で遅延バインディングを使用したい場合、Option Strict On ではエラーが発生します。そこで、遅延バインディングを回避する方法を教えていただけないでしょうか。ArrayList の疑似的な2次元配列を使用しているため、具体的なコード例やアドバイスをいただけるとうれしいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>「厳密に!」を重視して 嬉しいねぇ >List コレクション型では成功しましたがArrayList コレクション型では失敗。この辺りは、どうなんでしょうか? んー、C#にはArrayList<T>ってのは無いんだよね。 List<T>とかArrayListはあるけど。 Javaは逆にArrayList<T>はあるけど List<T>ってのはインターフェースであって クラスじゃない(ちなみにC#のインターフェースはIList<T>) #ただ単にライブラリ製作者の名前の付け方の考え方が違うだけだと思う。

noname#140971
質問者

お礼

>「厳密に!」を重視して 嬉しいねぇ 意味ありげなoptionを書かれれば・・・。 しかし、全てのプロジェクトを消して40日のメモを見てのやり直し。 結構、大変でした。 しかし、型の理解に関する中途半端さを思い知ることができました。 #ただ単にライブラリ製作者の名前の付け方の考え方が違うだけだと思う。 ここで決着します。 いずれにしろ、List を使えば良いわけですから・・・。 ありがとうございました。

その他の回答 (1)

回答No.1

うん、やっぱり一発で何が聞きたいか読み取れない >「もし、もしではあるが、配列そのものをリストの項目としたら・・・」 >「それも 1 次元じゃーないか・・・」 そこまでは問題ないんじゃないの? http://oshiete1.goo.ne.jp/qa4752021.html の時はそういうつもりで書いているし。 これかなあ…聞きたいのって。 =========== 何故エラーになるのか: http://msdn.microsoft.com/en-us/library/system.collections.arraylist.item%28VS.71%29.aspx 戻り値が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でもこの構文を使っている。

noname#140971
質問者

お礼

' ================================= ' 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 コレクション型では失敗。 この辺りは、どうなんでしょうか?