DataTable是通过引用传递的吗?

时间:2014-06-17 18:59:15

标签: c# .net

这听起来像是一个愚蠢的问题,但我偶然发现了这一点。我知道您可以使用ref通过引用传递参数。但我有这个方法

    public void SaveRecordsIntoTemporaryTable(DataTable objDataTable, string userSessionID)
   {

       // The objDataTable has 5 columns "Id", "Name", "Tag_1", "Tag_2", "Tag_3"
       // Now in here I remove "Tag_1", "Tag_2", and "Tag_3"
       objDataTable.Columns.Remove("Tag_1");
       objDataTable.Columns.Remove("Tag_2");
       objDataTable.Columns.Remove("Tag_3");

       ...

   }

现在我在第三行设置了一个调试点,但是在删除此列"Tag_3"之后,我将光标悬停在参数objDataTable上,DataTable它也显示了删除了列?那么,它是通过引用传递的吗?

更新

好的,如果它被reference传递,如果我使用ref会有什么不同?

2 个答案:

答案 0 :(得分:6)

  

那么,它是通过引用传递的吗?

其地址按值传递。由于DataTable是一个类(引用类型),因此它的地址通过值传递,因此您可以看到更改。

尝试做:

objDataTable = null;

如果真的通过引用传递,那么您会看到来电者将DataTable设置为null,但将设置为

请参阅:Parameter passing in C# by Jon Skeet

答案 1 :(得分:-1)

DataTable,从对象派生的任何其他内容都通过引用传递。如果您明确地将其作为ref传递,则引用将通过引用 - 允许您将变量更改为指向另一个DataSet(或null)。

修改 - 忽略第一句话。它应该是DataTable,从object派生的任何其他内容都是引用类型。

调用按值传递引用类型的方法仍允许修改类型的属性。