适用于通用类型层次结构的DebuggerTypeProxy

5
我正在尝试为Math.NET Numerics中的矩阵和向量编写一个调试器类型的代理/替代品,以便调试器显示更有用的信息(在F# FSI中也是如此)。类型层次结构如下:
- 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> 等也可以很好地工作。

有什么想法吗?

相关:

1个回答

10

MatrixSummary变为嵌套类:

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

聪明的想法,谢谢!不幸的是,它对我也没用。当前解决方案:由Matrix <T>实现的非通用接口和相应的代理。 - Christoph Rüegg
嗯...它在我的机器上是正常的。我将其放在基类中(即您的Generic.Matrix<T>),并且它向下传递到继承类中。 - Jeffrey Sax
奇怪,我还是无法让它工作。我的代理基本上是(Matrix<T>的子类): public class MatrixSummary { public MatrixSummary(Matrix<T> m) { P = xy; } public string P {get;set;} } 我已经像上面一样将属性添加到Matrix<T>中了。你做了其他什么吗?我在VS2012 Update 2上,使用R# 7.1.2,不知道是否有某些设置或工具在干扰。 - Christoph Rüegg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接