代码之家  ›  专栏  ›  技术社区  ›  Christoph Rüegg

用于泛型类型层次结构的DebuggerTypeProxy

  •  5
  • Christoph Rüegg  · 技术社区  · 13 年前

    我正试图在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 回复  |  直到 7 年前
        1
  •  10
  •   Jeffrey Sax    13 年前

    制作 MatrixSummary 嵌套类:

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