【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への甘えなのでしょう


追記:あ、上のコードコンパイル通んないや。さてどこでしょう? 超初級編だね