- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 ImmutableArray<>
中遇到了一个看起来很奇怪的错误(使用 BCL 不可变集合 v1.0.12.0,运行时 .NET 4.5):
我在同一命名空间下的同一源文件中有以下两个完全相同的结构:
public struct WeightedComponent {
public readonly IComponent Component;
public readonly decimal Weight;
public WeightedComponent(IComponent component, decimal weight) {
this.Component = component;
this.Weight = weight;
}
}
public struct WeightedComponent2 {
public readonly IComponent Component;
public readonly decimal Weight;
public WeightedComponent2(IComponent component, decimal weight) {
this.Component = component;
this.Weight = weight;
}
}
下面会抛出异常:
var elements1 = new[] { 1, 2, 3 }.Select(wc => new WeightedComponent(null, 0)).ToImmutableArray();
var foo = elements1.Select((e1, i1) => elements1.Select((e2, i2) => 0).ToArray()).ToArray();
if (foo.Length != 3) throw new Exception("Error: " + foo.Length); //Error: 1
var elements2 = new[] { 1, 2, 3 }.Select(wc => new WeightedComponent2(null, 0)).ToImmutableArray();
var foo2 = elements2.Select((e1, i1) => elements2.Select((e2, i2) => 0).ToArray()).ToArray();
if (foo2.Length != 3) throw new Exception("Error: " + foo.Length);
如果我将 elements1 投影到 ToArray()
中在第一行而不是 ToImmutableArray()
,一切正常。
这两个结构之间的唯一区别是 WeightedComponent
被之前的代码广泛使用,而WeightedComponent2
以前从未使用过(这就是为什么重现错误可能不明显)。
迭代elements1
同一个表达式中的两次似乎与该问题有关,就好像我将其删除了 Select
工作正常,但 elements2
没有这样的问题.这似乎真的与代码背后的方式有关ImmutableArray<>
正在考虑这两种结构(也许有缓存机制?)
您知道是什么原因造成的吗?
最佳答案
这是由于 ImmutableArray<T>
中的错误所致枚举器,在您第一次枚举集合的空实例时触发。 future 版本的 NuGet 包将修复此问题。同时,我强烈建议您避免使用 ImmutableArray<T>
.
关于c# - 对于带索引的嵌套选择,ImmutableArray<> 的行为不同于 Array<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18717171/
有什么方法(可能是肮脏的 hack)来创建一个只使用指定数组而不是复制它的 ImmutableArray? 我有一个我知道不会改变的数组,我想创建一个 ImmutableArray 以允许客户端安全地
为什么 ImmutableArray Microsoft Immutable Collections NuGet 包版本中似乎没有 1.0.34 ? 最佳答案 ImmutableArray不存在于您的
我有一个带有静态成员的内部静态类 MyLists: internal static ImmutableArray MyList = new ImmutableArray { "asd", "q
所以我在多线程环境中工作,我不想一直使用 ImmutableArray,因为它是线程安全的。 不幸的是,ImmutableArray 实现线程不安全接口(interface),因此 LINQ 中的 S
我正在尝试对现有的 ImmutableArray 进行切片在一种方法中,我认为我可以使用构造方法 Create(ImmutableArray a, int offset, int count)像这样:
我在 ImmutableArray<> 中遇到了一个看起来很奇怪的错误(使用 BCL 不可变集合 v1.0.12.0,运行时 .NET 4.5): 我在同一命名空间下的同一源文件中有以下两个完全相同的
假设我有如下方法: unsafe void Convert(byte* ptr, int length) { var span = new Span(ptr, length); var
ImmutableArray 之间有什么区别?和 ImmutableList ,最好在哪里使用它们? 最佳答案 以下是一些可能有助于解释的读物:Please welcome ImmutableArra
当我尝试隐式转换时出现此错误: Cannot implicitly convert type 'System.Array' to 'System.Collections.Immutable.Immut
问题 我在两个相应的 dll 中有以下代码。 dll1 依赖于 dll2。 当 DoWork()被调用它将执行 myInterface.MyListMethod(ImmutableList.Empty
我是一名优秀的程序员,十分优秀!