我正在尝试为Math.NET Numerics中的矩阵和向量编写一个调试器类型的代理/替代品,以便调试器显示更有用的信息(在F# FSI中也是如此)。类型层次结构如下:
- Generic.Matrix - Double.Matrix : Generic.Matrix - Double.DenseMatrix : Double.Matrix
已经实现了具有封闭泛型类型的非泛型代理。如果构造函数接受Double.Matrix或Double.DenseMatrix,它也可以按同样的方式工作。
然后,使用以下方式装饰Double.DenseMatrix:
- Generic.Matrix - Double.Matrix : Generic.Matrix - Double.DenseMatrix : Double.Matrix
已经实现了具有封闭泛型类型的非泛型代理。如果构造函数接受Double.Matrix或Double.DenseMatrix,它也可以按同样的方式工作。
public class MatrixSummary
{
public MatrixSummary(Matrix<double> matrix) { }
// ...
}
然后,使用以下方法装饰 Double.DenseMatrix:
[DebuggerTypeProxy(typeof(MatrixSummary))]
我的工作期望
我希望不必为每种类型单独实现代理,所以让我们将其变得通用:
public class MatrixSummary<T> where T : ...
{
public MatrixSummary(Matrix<T> matrix) { }
// ...
}
然后,使用以下方式装饰Double.DenseMatrix:
[DebuggerTypeProxy(typeof(MatrixSummary<>))]
或者可能会关闭:
[DebuggerTypeProxy(typeof(MatrixSummary<double>))]
如果需要,可以将该属性添加到基类中。
即使文档说在使用开放泛型类型(如 MatrixSummary<>
)声明属性时应该能够正常工作,但是在调试单元测试时,上述方法都无效。毕竟,使用 List<T>
等也可以很好地工作。
有什么想法吗?
相关:
Generic.Matrix<T>
),并且它向下传递到继承类中。 - Jeffrey Sax