C# 如何在C语言的调试器中显示数组#
这是一个常见的问题:调试器将您的小数组显示为C# 如何在C语言的调试器中显示数组#,c#,debugging,extension-methods,C#,Debugging,Extension Methods,这是一个常见的问题:调试器将您的小数组显示为System.String[]或类似形式,但您希望在不必单击并打开的情况下查看值。怎么做 我有一个答案。也许您有一个更好的方法。首先,您需要一个模板化的扩展方法,如下所示 public static class UtilExtensions { // string join that works on any enumerable public static string Join<T>(this IEnumerable
System.String[]
或类似形式,但您希望在不必单击并打开的情况下查看值。怎么做
我有一个答案。也许您有一个更好的方法。首先,您需要一个模板化的扩展方法,如下所示
public static class UtilExtensions {
// string join that works on any enumerable
public static string Join<T>(this IEnumerable<T> values, string delim) {
return String.Join(delim, values.Select(v => v == null ? "null" : v.ToString()));
}
神奇的是,只要有CommonRow类型的值,调试器就会显示类似“1,2,3,55,99”的值。在这种情况下,我不喜欢重写ToString()方法。对于开发人员来说,定义一个返回所需对象的字符串表示形式的属性更具可读性 使用
DebuggerDisplay
时,它将如下所示:
public struct CommonRow {
public object[] Values;
public override string ToString() {
return Values.Join(",");
}
}
[DebuggerDisplay("Values = {DisplayValue}")]
public struct CommonRow {
public object[] Values;
public string DisplayValue
{
get
{
return Values.Join(",");
}
}
}
您可以使用C#6缩短属性(感谢@jeppe stig nielsen):
考虑到您的扩展类:
public static class UtilExtensions
{
// string join that works on any enumerable
public static string Join<T>(this IEnumerable<T> values, string delim)
{
return String.Join(delim, values.Select(v => v == null ? "null" : v.ToString()));
}
{
您可以找到
DebuggerDisplayAttribute
:msdn.microsoft.com/en-us/library/x810d419.aspx或msdn.microsoft.com/en-us/library/ms228992(v=vs.110)的文档。aspx使用DebuggerDisplayAttribute
:或@SebastianSchulz:如何工作?这是一个提议的答案吗?这只是一个想法。问题是,您无法将此属性添加到System.String[]中,但如果您有一个包含要调试的数组的类,您可以将此属性添加到该类中,并定义一种显示它的方式。这个答案很好。您不认为您会得到更好的属性。您永远不知道Jon Skeet何时会罢工。@Neil:很高兴您这么说,但最重要的是总有改进的余地。我想塞巴斯蒂安表现得很好。但是,如果你写得更清楚一些,这个答案是指david.pfx本人的答案,这将是有帮助的;否则,例如,.Join(“,”
的工作原理就不清楚了。编辑:如果您根据上面的评论重复指向[DebuggerDisplay]
文档的web链接,也可以改进答案。使用C#6.0,您还可以编写公共字符串DisplayValue=>值。Join(,“”)代码>如果您喜欢该语法。结果是完全一样的。@sebastian:+1,因为有时候它只是一个调试器。但它不可能只被使用一次。
public static class UtilExtensions
{
// string join that works on any enumerable
public static string Join<T>(this IEnumerable<T> values, string delim)
{
return String.Join(delim, values.Select(v => v == null ? "null" : v.ToString()));
}
{
public string DisplayValue => String.Join(delim, Values.Select(v => v == null ? "null" : v.ToString()));