我正在调试一个应用程序,在某个时刻,我有一个包含大量项目的列表,这使我无法一步一步地观察每个元素。我想检查 PropertyName =" XXX"的元素 Layer 内的值是什么。有没有简单的方法呢?
外部代码:
var metadata = FieldsConfigurationProvider.GetAllFieldsConfiguration();
RequestDocumentTypeModel model = new RequestDocumentTypeModel()
{
Requester = CurrentUser.Login,
MetadataItems = metadata.Where(f => !f.IsSystemGenerated).Select(f => new RequestDocumentMetadataItem(f.DocumentModelPropertyName, f.DisplayName, false, f.Layer)).ToList()
};
// BREAKPOINT HERE
// # MORE CODE #
当然我不能使用立即窗口和LINQ,因为LINQ是不允许的。我使用的是Visual Studio 2010,但据我所知,其他版本也有相同的问题"。
答案 0 :(得分:3)
我想检查属性Layer里面的元素是什么值 PropertyName =“XXX”。有没有简单的方法呢?
是的,您可以指定断点条件。然后只有在满足条件时它才会停止。
在你的情况下:
PropertyName == "XXX"
How to: Specify a Breakpoint Condition
请记住,您从未指定类似PropertyName = "XXX"
的条件,因为它会静默更改变量值。
答案 1 :(得分:2)
如果您需要一次查看整个列表,请在RequestDocumentMetadataItem
MetadataItems
上尝试DebuggerDisplayAttribute
[DebuggerDisplay("DisplayName = {DisplayName} PropertyName = {PropertyName}")]
答案 2 :(得分:1)
我可以建议两种解决方法:
答案 3 :(得分:1)
您可以尝试在对象类型的List
周围编写一个小包装器,并为其提供一个基于字符串的[]
重载访问器。像这样:
public class ComplexType
{
public string PropertyName { get; set; }
public string Layer { get; set; }
public string DisplayName { get; set; }
}
public class DebuggableList : List<ComplexType>
{
public ComplexType this[string key]
{
get
{
return this.FirstOrDefault(i => i.PropertyName == key);
}
}
}
class Program
{
static void Main(string[] args)
{
var myList= new DebuggableList();
myList.Add(new ComplexType { DisplayName = "XXX", Layer = "YYY", PropertyName = "ZZZ" });
myList.Add(new ComplexType { DisplayName = "AAA", Layer = "BBB", PropertyName = "CCC" });
myList.Add(new ComplexType { DisplayName = "DDD", Layer = "EEE", PropertyName = "FFF" });
}
}
在观察窗口中,您可以使用myList["XXX"]
访问所需对象,并使用PropertyName
==&#34; XXX&#34;将会显示。
答案 4 :(得分:1)
也许右键单击代码中的行,选择Breakpoint -> Insert Tracepoint,并明确指定带有注释的属性名称,例如:
然后您可以在输出窗口中检查它。它的美妙之处在于您不需要编译任何其他代码,您可以在运行时随时更改它。
答案 5 :(得分:0)
您可以编写一个带有辅助函数的静态调试类来进行调试。有一些扩展可以帮助调试VS本身,但我认为没有一个是免费的。