当我尝试在发布模式下编译一个依赖于 MathNet.Numerics NuGet 包 (PCL Profile7) 的普通 UWP 应用程序时,我遇到了内部编译器错误NUTC3028。 相关的 Github 问题。
NUTC3028:Internal Compiler Error: Method
'instance Tuple<int, int, T, TOther>
DenseColumnMajorMatrixStorage<T>.Find2Unchecked<TOther>(MatrixStorage<TOther>,
Func<T,TOther,bool>, Zeros)'
on type
'DenseColumnMajorMatrixStorage<T>'
from assembly
'MathNet.Numerics'
tried to implicitly override a method with weaker type parameter
constraints while loading type
'DenseColumnMajorMatrixStorage<T>'.
while computing compilation roots.
DenseColumnMajorMatrixStorage<T>
继承自MatrixStorage<T>
,它们都具有相同的约束where T : struct, IEquatable<T>, IFormattable
。
override DenseColumnMajorMatrixStorage<T>.Find2Unchecked<TOther>(..)
overrides virtual MatrixStorage<T>.Find2Unchecked<TOther>(..)
,后者对泛型方法类型参数再次具有相同的约束:where TOther : struct, IEquatable<TOther>, IFormattable
. 在 C# 中,重写时无法更改甚至声明约束,因此在重写方法中没有额外的约束。
我并没有完全遵循应该更弱的类型参数约束;它们在我看来完全一样。我错过了什么?
警告:复制这可能需要一段时间;在我的机器上,ilc 运行了大约两个小时(原文如此!),然后出现错误