次のコードのメソッド 1 が、他の 2 つのメソッドが行う DataTable を変更しない理由を正確に説明できる人はいますか?
明らかに何らかの参照の問題ですが、正確にはなぜですか?
Imports System
Imports System.Data
Public Class Test
Public Shared Sub Main()
'Build Table
Dim dt as New DataTable
dt.Columns.Add("ID",GetType(String))
dt.Columns.Add("Name",GetType(String))
'Populate Table
Dim dr as DataRow
dr = dt.NewRow()
dr("ID")="Man" : dr("Name") = "mike" : dt.Rows.Add(dr)
dr = dt.NewRow()
dr("ID")="Man" : dr("Name") = "ian" : dt.Rows.Add(dr)
dr = dt.NewRow()
dr("ID")="Man" : dr("Name") = "rob" : dt.Rows.Add(dr)
dr = dt.NewRow()
dr("ID")="Woman" : dr("Name") = "ann" : dt.Rows.Add(dr)
dr = dt.NewRow()
dr("ID")="Woman" : dr("Name") = "sam" : dt.Rows.Add(dr)
output(dt) 'Output Table
Dim drFilters() as DataRow = dt.Select("ID='Man'") 'Select all Man
'Method 1 does not change dt
'dr = dt.NewRow()
'dr("ID")="cowman" : dr("Name")="bugle"
'drFilters(1)=dr
'Method 2 does change dt
dr = drFilters(1)
dr("ID")="cowman" : dr("Name")="bugle"
'Method 3 does change dt
'drFilters(1)("ID")="cowman" : drFilters(1)("Name")="bugle"
output(dt) 'Output final table
End Sub
Public Shared Sub output(dt as DataTable)
for each dr as DataRow in dt.Rows
Console.WriteLine(dr("ID") + vbTab + dr("Name"))
Next
Console.WriteLine("")
End Sub
End Class
愚かなテストデータの謝罪:)