Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#迭代器和指针? 我知道C语言中没有指针,但是我在想办法做下面的事情,我用C++中的指针(或者更好的迭代器)来做(我在C语言中学习了一门教程,但是我已经知道C++)了。_C#_C++_Iterator - Fatal编程技术网

C#迭代器和指针? 我知道C语言中没有指针,但是我在想办法做下面的事情,我用C++中的指针(或者更好的迭代器)来做(我在C语言中学习了一门教程,但是我已经知道C++)了。

C#迭代器和指针? 我知道C语言中没有指针,但是我在想办法做下面的事情,我用C++中的指针(或者更好的迭代器)来做(我在C语言中学习了一门教程,但是我已经知道C++)了。,c#,c++,iterator,C#,C++,Iterator,我们接到一个任务,写一个简单的“存储”程序(库存、交易等)。我的第一个想法(来自C++)是这样的:有一个项目及其库存量的链接列表。然后,有一个表示销售的类,该类具有当前销售中的项目列表,其中每个项目表示为主库存列表中特定项目的迭代器和金额值。(我希望这是清楚的。) 我在C#中也尝试过同样的方法,但不知道如何将这些迭代器放到主列表中(它们最好在主列表的更新中也很好)。 如何做到这一点?使用引用不需要做任何特殊的事情,它们默认在C#中使用 我假设您会在C++中执行类似的操作: class Sale

我们接到一个任务,写一个简单的“存储”程序(库存、交易等)。我的第一个想法(来自C++)是这样的:有一个项目及其库存量的链接列表。然后,有一个表示销售的类,该类具有当前销售中的项目列表,其中每个项目表示为主库存列表中特定项目的迭代器和金额值。(我希望这是清楚的。)

我在C#中也尝试过同样的方法,但不知道如何将这些迭代器放到主列表中(它们最好在主列表的更新中也很好)。
如何做到这一点?

使用引用不需要做任何特殊的事情,它们默认在C#中使用

我假设您会在C++中执行类似的操作:

class Sale {
  public:
    void AddItem(Item* i) {
        items.push_back(i);
    }

  private:
    std::vector<Item*> items;
};

几乎可以肯定的是,您必须编写自己的迭代器风格的接口——C#似乎没有提供任何接近如此灵活的接口。您可以编写自己的扩展方法和提供此功能的类,但您必须自己编写,我敢肯定它在.NET标准库中不存在。

C语言确实支持指针。好的,但不容易,不好,也不推荐,因此不是我想要的。我不确定(从问题中)这里的答案是否只是“对象引用”和“列表”…?C#和所有其他闪亮的内存管理OO语言一样,有指针,它们一直在使用——只是它们被称为引用。没有指针算术,但除此之外它们都是指针。你的C#book/老师怎么说?你不应该猜测编程。你知道C++;那又怎么样?这并不意味着你神奇地掌握了一门完全不同的语言。你不会认为你会驾驶飞机,因为你会驾驶汽车,是吗?这和OP要求的还差得远。@DeadMG按照我阅读OP的方式,他想使用指针,这样他的“销售”就不会包含商品的副本,所以对商店主列表中的商品所做的任何更新也会显示在销售中。虽然他确实提到使用迭代器,但我阅读的方式是,他不希望迭代器能够遍历列表,而是希望它们充当指向特定列表项的指针,因此一旦他得到了一个,它将只被取消引用,而不会递增/递减。迭代器的主要目的是允许迭代。因此得名。引用的用途不同,因为如果引用列表[0],则更改列表[0],则引用不会更新,而如果将迭代器引用到向量[0],然后将其分配到向量[0],则更改将在迭代器中更新。@DeadMG如果我没有正确解释,我很抱歉,但Zareth的建议正是我想要的(我想,我还没有真正尝试过)。我没有意识到,所有类的副本都只是定义上的引用。我认为它们实际上是复制品(我似乎记得在Java中是这样的,我想我认为在c#中也是这样)
class Sale {
  private List<Item> items;

  public void AddItem(Item i) {
    items.Add(i);
  }
}
Item item = new Item("A test item");
Sale sale = new Sale();
sale.AddItem(item);