什么是c#中的ImmutableArray

时间:2013-06-26 11:22:45

标签: c# immutablearray

我看到this

  

此软件包提供线程安全且有保证的集合   永远不要改变他们的内容,也称为不可变的集合。

但我不明白究竟是什么以及何时应该使用ImmutableArray?

3 个答案:

答案 0 :(得分:6)

不可变对象可以定义为一个对象,其状态在创建后无法修改。最广泛使用的不可变对象当然是 String 对象。当线程安全是一个问题时,可用对象很有用和/或必须在只读模式下访问代码外的对象实例。
优点:

  • 线程安全
  • 在a之外传递不可变对象的引用是安全的 没有数据可以更改的风险的课程

<强>缺点:

  • 内存使用

使用方法:

using ImmutableByteArray = System.ImmutableArray<byte>;
using ImmutableCharArray = System.ImmutableArray<char>;

也可以从像...这样的可变数组创建不可变数组。

ImmutableByteArray array1 = new ImmutableByteArray(new byte[] { 0, 1, 2, 3 });
ImmutableCharArray string = new ImmutableCharArray("test".ToCharArray());

我们可以从另一个不可变数组创建不可变数组。

ImmutableByteArray array2 = new ImmutableByteArray(new byte[] { 0, 1, 2, 3 });
ImmutableByteArray array3 = array1 + array2;

在这种情况下, array3 不会消耗更多内存 ImmutableArray支持枚举。所以使用like ..

foreach (byte b in array1)
    Console.Write(b + " ");

并且可以实施 ICloneable 界面..

array5 = array1.Clone();

ImmutableArray还会覆盖并实现 Equals()和'=='以及'!='运算符。

Console.WriteLine("array1 equals array2: {0}", (array1.Equals(array2)); //same as array1 == array2

到目前为止,如果 array1!= array2 相同,您可以使用上面的代码行!等于()

答案 1 :(得分:5)

不可变数组将是readonly对象,不像ExpandoObject

这意味着定义后不能更改值(除非再次定义)

例如:

ImmutableByteArray byteArray = new ImmutableByteArray(new byte[] { 0, 1, 2, 3 });

除非再次定义,否则将始终具有可变数组new byte[] { 0, 1, 2, 3 }给出的值。

答案 2 :(得分:0)

我想向您解释不可变集合,但如果您在此处阅读更多详细信息,则会更好: http://blogs.msdn.com/b/bclteam/archive/2012/12/18/preview-of-immutable-collections-released-on-nuget.aspx