Math.NET Numerics で行列とベクトルのデバッガー タイプのプロキシ/サロゲートを作成しようとしているので、デバッガーはより有用な情報を表示します (F# FSI でも)。型階層は次のとおりです。
Generic.Matrix<T>
Double.Matrix : Generic.Matrix<double>
Double.DenseMatrix : Double.Matrix
機能するもの
閉じたジェネリック型の非ジェネリック プロキシ。コンストラクターの代わりにaまたは aMatrix<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>
などでもやはりうまくいきます。
何か案は?
関連している: