【VB2010】ByValなのに強制的に参照渡しされる
呼び出し先で列を削ったら元のDataTableに反映されちゃいました。
Private Sub hoge() 'Excelがインストールされてないサーバーで動かすのでJetOle4.0で読む トホホ Dim table As DataTable = GetTableFromOleDb() fuge(table) Dim list As New List(Of String) For Each dr As DataRow In table.Rows 'ここで落ちる あれ?No列がなくなってるYO! list.Add(dr("No").ToString() End For End Sub Private Sub fuge(ByVal srcTable As DataTable) srcTable.Columns.Remove("No") 'No列を削除 End Sub
結局新しいDataTableをコピーしたものを使いました。(コードは忘れたので省略)
ちゃんとしたソースは見ていませんが、String以外の参照型は勝手に参照渡しになっちゃうのがVB仕様らしいです。
どんなだよ!
暗黙的ならわかりますがわざわざByValつけてるんだから警告くらいしてくれてもよいのでは?
と思っちゃうのはintellisenseを始め何かと便利なMSへの甘えなのでしょう
追記:あ、上のコードコンパイル通んないや。さてどこでしょう? 超初級編だね