- ベストアンサー
VB functionについて
- VB functionとは何ですか?VB2010で動作させると型'double'の値を'system.Collections.ArrayList'に変換できない問題について教えてください。
- Button1_Click関数とAAA関数の役割について教えてください。
- Button1_Click関数で配列aArrに値を代入する際、なぜエラーが発生するのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
配列を渡したいのか ArryListとして渡したいのかどちらでしょう 現状の呼び出し元は 配列ですよね ならば受け側も配列を受け入れる型にしないといけません 使えるのは Array や Double() などです Integer()や Long()などもココで計算させたいなら Arrayを選択したほうがいいでしょう Double()だけというなら Double()で受けたほうがいいと思います Public Function AAA( byVal aArr as Double() ) as Double() または Public Function AAA( byVal aArr as Array ) as Double() Arrayにするなら 呼び出し元が算術できる型なのかをチェックしたほうがいいでしょう String() でも Object()でも渡せてしまいますから Dim ObjType as System.Type = aArr.GetType() With objType.Name if .StartsWith("Double") = false And _ .StartsWith("Single") = false And _ .StartsWith("Int32") = false And _ .StartsWith("Int64") = false Then return Nothing ' または 例外をスローするとか End if End With Dim retVal As Double() = Nothing ReDim retVal(2) Dim loopCnt As Integer = 0 Dim Arrcnt As Integer = aArr.Length Dim sum As Double = 0.0 For loopCnt = 0 To Arrcnt - 1 sum += aArr(loopCnt) Next sum = sum / Arrcnt 'loopCnt retVal(0) = sum Return retVal End Function あと 呼び出し元で MsgBox( AAA(aArr) ) としていますが Double()で返ってくるので MsgBox(AAA(aArr)(0))といった具合に 要素を指定しましょう ArrayListでやるのであれば呼び出し元を dim aArr as new ArrayList aArr.Add(1.1) aArr.Add(2.3) MsgBox( AAA( aAr )(0) ) としてやって Public Function AAA(ByVal aArr As ArrayList) As Double() Dim retVal As Double() = Nothing ReDim retVal(2) Dim loopCnt As Integer = 0 Dim Arrcnt As Integer = aArr.Count Dim sum As Double = 0.0 For loopCnt = 0 To Arrcnt - 1 sum += aArr(loopCnt) Next sum = sum / Arrcnt 'loopCnt retVal(0) = sum Return retVal End Function といった具合になると思います