c# - DataTable 是通过引用传递的吗?

标签 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 会有什么不同?

最佳答案

So, is it getting passed by reference?

它的地址是按值传递的。由于 DataTable 是一个类 (引用类型),它的地址按值传递,因此您会看到变化。

尝试做:

objDataTable = null;

如果它确实是通过引用传递的,那么您将看到调用者将 DataTable 设置为 null这不会发生

参见:Parameter passing in C# by Jon Skeet

关于c# - DataTable 是通过引用传递的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24271404/

相关文章:

c# - 数据访问层(DAL)中的LINQ查询方法

.net - 这个工作进程崩溃的原因是什么?

c# - 从WCF应用程序传递回WPF应用程序的ReportServer的byte []反序列化上没有BinaryHeader错误

c# - 条形码扫描仪发送以换行符结尾的数据时如何使按钮散焦

c# - asp.net MVC 2 使用数据注释验证文件上传

c# - 为什么最后一行永远不会被读取?

c# - C# : What is the purist way of achieving what I am trying to do? 中的多重继承

c# - WPF:如何让屏幕阅读器忽略进度条状态更新?

.NET Threadpool 工作线程和异步 IO 线程

.net - 使用 LINQ 选择和组合对象的正确方法是什么?