C#使用包含相同数据的两个集合

时间:2011-06-23 08:39:57

标签: c# .net collections

我对C#很新。在C ++中,如果我想要两个包含部分或全部相同数据的集合,那么它真的很容易。例如,您只需在堆上创建对象,并在每个集合中使用一组(自动)指针。 C#似乎没有指针的概念,所以你如何在C#中做同样的事情?

一个集合(可能是一个数组)将包含所有对象。另一个(可能是队列)将包含数组中的内容的子集。最终,对象将从队列中删除,但仍保留在数组中。

我确信这是一个非常简单的问题,但我仍然在考虑C ++和C#之间的差异。

4 个答案:

答案 0 :(得分:2)

您可能需要首先了解参考和值类型。

http://www.codeproject.com/KB/cs/Types.aspx

答案 1 :(得分:2)

C#在不安全的上下文中有指针,就像你习惯于在C ++中一样。但是,大多数复杂对象在C#中通过引用传递开始,这意味着(简化)您添加到两个集合的单个对象将是同一个对象。其中,字符串和整数将是值类型,例如,字符串将是不可变的。

有关C#中类型的更多信息:http://msdn.microsoft.com/en-us/library/3ewxz6et.aspx

关于不变性的冗长博文:http://blogs.msdn.com/b/ericlippert/archive/2007/11/13/immutability-in-c-part-one-kinds-of-immutability.aspx


C#有一个垃圾收集器,可以为你处理内存和引用管理,任何孤立的引用通常都会在合理的时间内被清除。

有关内存管理的更多信息:http://msdn.microsoft.com/en-us/library/f144e03t(v=VS.100).aspx

答案 2 :(得分:0)

在C#中,数据默认为referenced(未复制,除非它是struct(ValueType)),因此如果您在一个地方使用另一个对象分配变量,则它是一个引用,创建

示例:

class C {}
var a = new C();
var b = a;
//a and b points to the same object

无论如何,您可以在unsafe上下文中使用C#中的指针(虽然不推荐)。

答案 3 :(得分:0)

C#中的几乎所有对象都是在堆上构造的,并且可以通过指针访问。 .几乎与C ++中的->一样使用。恕我直言,它的工作更自然。

在考虑“指针”时,集合不包含数据,它引用数据。

所以在你的例子中,它会像你描述的那样工作。