为什么Vector <T> .Count是静态的?

Col*_*nic 5 .net system.numerics

我正在尝试使用System.Numerics.Vector<T>(文档).

我写了一个简单的单元测试:

var v = new System.Numerics.Vector<double>(new double[] { 12, 13, 14 });
Assert.AreEqual(3, v.Count);
Run Code Online (Sandbox Code Playgroud)

但它给了我一个构建错误:

无法使用实例引用访问成员'Vector.Count'; 用类型名称来限定它

令我惊讶的Vector<T>.Count是,是静态的.

所以我尝试过:

var v = new System.Numerics.Vector<double>(new double[] { 12, 13, 14 });
Assert.AreEqual(3, Vector<double>.Count);
Run Code Online (Sandbox Code Playgroud)

现在代码构建但单元测试失败:

Assert.AreEqual失败.预期:<3>.实际:<2>.

这是怎么回事?


调查我发现:

Assert.AreEqual(2, Vector<double>.Count);
Assert.AreEqual(4, Vector<float>.Count);
Assert.AreEqual(4, Vector<int>.Count);
Assert.AreEqual(2, Vector<long>.Count);
Run Code Online (Sandbox Code Playgroud)

Bar*_*zKP 4

该文档表明这是设计使然:

Vector 实例的计数是固定的,但其上限取决于 CPU 寄存器。

其目的是允许使用硬件功能进行矢量化操作,因此其容量与 CPU 架构相关。

  • 在我看来,MSDN 中的这一声明只会让事情变得更加混乱,因为短语“Vector 实例的计数”意味着 Count 实际上是一个实例成员。 (4认同)