DebuggerTypeProxy用于泛型类型层次结构

时间:2013-03-29 16:55:42

标签: c# debugging visual-studio-2012 mathdotnet

我正在尝试在Math.NET Numerics中为矩阵和向量编写调试器类型代理/代理,因此调试器显示更多有用的信息(也在F#FSI中)。类型层次结构如下:

  • Generic.Matrix<T>
  • Double.Matrix : Generic.Matrix<double>
  • Double.DenseMatrix : Double.Matrix

什么有效

具有封闭式泛型类型的非泛型代理。如果构造函数接受Matrix<double>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>等。

有什么想法吗?

相关:

1 个答案:

答案 0 :(得分:7)

使MatrixSummary成为嵌套类:

[DebuggerTypeProxy(typeof(Matrix<>.MatrixSummary))]