【问题标题】:Update properties of objects in an IEnumerable<>更新 IEnumerable<> 中对象的属性
【发布时间】:2009-09-08 10:03:35
【问题描述】:

我正在开发一些应该用于特殊类型实验的软件。

实验使用:

1) 一个“芯片”(基本上是一个已知尺寸的 XY 网格)。 2) 每个芯片都包含“电极”,通过芯片上的 X 和 Y 坐标以及唯一的 ID 来标识。每个电极还可以容纳或不容纳样品,用一个简单的布尔值表示(它是一个生物传感芯片)。

我有用 C# 表示此硬件的对象。

我现在需要在实验中使用硬件;

1) 我有一个“Experiment”,它公开了一个 IEnumerable 持有“ExperimentStep”对象。 2) “ExperimentStep”包含一个名称,以及涉及的“电极”的有限列表。

一些实验步骤可以同时运行,并可能改变电极的“HasSample”属性。因此,当我执行“ExperimentStep”时,最好随时了解初始“HasSample”属性是什么。

这就是我的问题所在;

如果我只是将“Electrode”对象传递给我的“ExpermentStep”,它们可能会通过 Value... 是否可以创建一个 IEnumerable 来保存对唯一电极的引用,以便每次我想运行“ ExperimentStep” 该步骤中使用的“Electrodes”列表包含“HasSample”的最新值?我应该为此使用指针吗?根据我对 C++ 的有限知识,我希望这在该语言中是微不足道的(因为您大部分时间都使用指针)。但是在 C# 中我真的一无所知(而且我的经验还不够)。

【问题讨论】:

    标签: c# pointers ienumerable byref byval


    【解决方案1】:

    c# a class is reference type。这意味着如果您创建一个类的实例列表,然后还将这些实例添加到另一个列表中,那么它的项目相同。每个列表都将包含一个参考。因此,是的,您可以使用 IEnumberable 来增加项目。

    【讨论】:

      【解决方案2】:

      我怀疑您不了解引用类型和值类型之间的区别,以及按值传递在 C# 中的真正含义。

      假设Electrode 是一个类,您可以修改它的实例的属性,并且这些更改将通过对同一对象的任何引用可见。

      强烈建议您在尝试开发大量生产代码之前确保您对 .NET 类型系统有深入的了解。不了解正在发生的事情的后果可能是灾难性的。

      我关于这些主题的几篇文章:

      ...但我建议你也买一本很好的 C# 入门书籍。

      【讨论】:

      • 嗯...虽然我肯定不是一个专业的程序员,但我已经编写了我相当一部分的应用程序(其中一些甚至使用像 Singletons、Factories 等设计模式......!!天哪)但直到现在我从来没有遇到过我问的东西似乎很重要的情况。如果我对 C#(或扩展为 .NET)有任何不满,那么它永远不会真正迫使你正确地思考这些事情(尽管它可能应该)。
      • 更进一步;我认为您的第二个链接中的这句话总结得很好(当谈到通过 ref 传递值类型而不是通过值传递 ref 对象时):“这种差异对于理解 C# 中的参数传递绝对至关重要,这就是我相信它的原因说对象默认是通过引用传递的,而不是正确的说法是对象引用默认是按值传递的,这是非常令人困惑的。”当你将一个对象按值传递给另一个类时,你所做的实际上是将一个类型安全的指针传递给该对象......
      • 没有一本很好的入门书籍真正正确地强调了这一点(我有一本 Mayo 的)
      • 我认为 C# 3.0 in a Nutshell 做得很合理,IIRC。
      猜你喜欢
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 2012-03-16
      • 2016-07-13
      • 1970-01-01
      相关资源
      最近更新 更多