我面临的问题可能是愚蠢的,但我从来没有遇到过,所以我想我需要一些帮助。我正在学习如何使用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命名空间(这可以解决问题,但我不确定它是否是正确的做法),除非这不是一个更好的选择。
有人可以帮我吗?
答案 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)) {