【问题标题】:Pass Reference Type by Value按值传递引用类型
【发布时间】:2023-04-09 23:20:01
【问题描述】:

以下帖子提供了有关传递引用类型的大量信息。但是,我现在有一个解决这种行为的实际问题。我正在使用以下代码将 DataTable 传递到第二个窗口;

Window2.LoadedTblData = _loadedTblData;

一旦通过,我希望用户继续能够使用 Window1(这意味着操纵 _loadedTblData)而不影响 Window2 中的数据。 IE。我想按值传递表格,而不是按引用传递。我该怎么做?

Why is list when passed without ref to a function acting like passed with ref?

【问题讨论】:

  • 只是对您的术语的更正:您不会说要“按值传递表格”,而是要“传递表格的副本”。
  • 因此问题...
  • 您的问题是:如何创建 DataTable 的副本,以便副本中的任何修改都不会反映在原始文件中。这个问题是使用关于值/引用类型的错误假设和按值/引用语义传递的。如果你想回答,你应该提出一个单独的问题
  • 当我说“按值传递表格”时,我指的是表格数据。我认为这在我解释我的意图时非常清楚。我知道传递表格意味着传递参考,但很明显,这不是我说“不是参考”的意图。无论如何,有人提供了我希望的答案,所以我认为不需要新问题。

标签: c# parameter-passing


【解决方案1】:

这是因为两个窗口都引用了同一个实际对象实例。

您需要制作数据表的副本并将副本传递到另一个窗口。

https://msdn.microsoft.com/en-us/library/system.data.datatable.copy(v=vs.110).aspx

【讨论】:

    【解决方案2】:

    如果您想在每个窗口中同时拥有表的结构和数据的副本,那么您需要使用 DataTable.Copy 而不是 DataTable.Clone。

    更多关于复制here的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 2014-03-03
      • 2013-04-12
      • 2012-01-16
      • 2012-10-14
      • 2014-08-23
      相关资源
      最近更新 更多