DebugVisualizer,循环引用

时间:2015-11-11 13:29:11

标签: c# debugging reference visualizer

我面临的问题可能是愚蠢的,但我从来没有遇到过,所以我想我需要一些帮助。我正在学习如何使用Debug Visualizer。 我创建了一个:DebuggerSide.cs位于CarGarageVisualizer命名空间。

我想在调试此实例时在此可视化工具中看到CarGarage<T>的类型,因此我已将以下属性放入该类:

    [DebuggerVisualizer(typeof(CarGarageVisualizer.DebuggerSide))]
    [Serializable]
    public class CarGarage<T>:IEnumerable<T>
        where T : Car,new()
    {
    ...
    }

现在,要添加第一个属性,我需要添加对包含CarGarageVisualizer类的DebuggerSide的引用。没关系。但现在,在我的DebuggerSide覆盖方法Show()中,我希望将从objectProvider参数获得的对象显式转换为CarGarage<T>的类型。但是为了能够做到这一点,我需要引用包含此定义的CarGarageLibrary。正如我所说,我无法做到这一点,因为我得到了关于递归引用的错误。

关于这个问题的其他帖子,我知道这是一个不好的做法。但是,我不想将CarGarage<T>类复制到我的Visualizer命名空间(这可以解决问题,但我不确定它是否是正确的做法),除非这不是一个更好的选择。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

您应该将CarGarageVisualizer.DebuggerSide放在一个单独的库中,并且可以被两者引用。

我认为没有正确使用它。

如何将CarGarage<T>放在一个单独的库中。

library CarGarage:
[Serializable]
public class CarGarage<T>:IEnumerable<T>
    where T : Car,new()
{
...
}
library DebugVis:  (uses CarGarage)
DebuggerSide....
library app:  (uses CarGarage)
[DebuggerVisualizer(typeof(CarGarageVisualizer.DebuggerSide))]
public class CarGarageImpl<T> : CarGarage<T> { }

答案 1 :(得分:0)

您可以使用DebuggerVisualizerAttribute constructor重载,该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() { ... } 包含{2}的可视化工具

if ($result = $mysqli->query("SELECT * FROM users", MYSQLI_USE_RESULT)) {