我面临的问题可能很愚蠢,但我从来没有遇到过,所以我想我需要一些帮助。我正在学习如何使用调试可视化器。我已经创建了一个:位于DebuggerSide.cs命名空间中的CarGarageVisualizer。
在调试CarGarage<T>实例时,我希望在这个可视化工具中看到它的类型,因此我向该类添加了以下属性:
[DebuggerVisualizer(typeof(CarGarageVisualizer.DebuggerSide))]
[Serializable]
public class CarGarage<T>:IEnumerable<T>
where T : Car,new()
{
...
}现在,要添加第一个属性,我需要添加对包含CarGarageVisualizer类的DebuggerSide的引用。没关系。但现在,在我的DebuggerSide的overriden方法Show()中,我希望显式地将从objectProvider参数获得的对象转换为CarGarage<T>类型。但要做到这一点,我需要引用包含这个定义的CarGarageLibrary。正如我所说的那样,我不能这样做,因为我得到了关于递归引用的错误。
从其他关于这个问题的帖子来看,我知道这是一种糟糕的做法。但是,我不想将CarGarage<T>类复制到Visualizer命名空间(这将解决问题,但我不确定这是否是正确的做法),除非没有更好的选择。
有人能帮我吗?
发布于 2015-11-11 14:57:19
您可以使用DebuggerVisualizerAttribute 构造函数重载,它接受包含可视化器的完全限定类型名称的string,如下所示
public static class MyVisualizers
{
public const string AssemblyRef = @"MyVisualizers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
}
[DebuggerVisualizer("MyVisualizersNamespace.CarGarageVisualizer+DebuggerSide, " + MyVisualizers.AssemblyRef)]
[Serializable]
public class CarGarage<T>:IEnumerable<T>
where T : Car,new()
{
...
}https://stackoverflow.com/questions/33651584
复制相似问题