Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何为从调试器下的列表继承的类设置VS show ToString()值?_Visual Studio_Visual Studio Debugging - Fatal编程技术网

Visual studio 如何为从调试器下的列表继承的类设置VS show ToString()值?

Visual studio 如何为从调试器下的列表继承的类设置VS show ToString()值?,visual-studio,visual-studio-debugging,Visual Studio,Visual Studio Debugging,当我创建一个类并重写ToString()时,当我在调试器下运行Visual Studio时,我可以用鼠标光标将鼠标悬停在该类型的变量上,VS显示我在方法中返回的任何内容,让我把这个特定类的典型信息和调试期间有价值的信息放在那里。但是,如果我从列表继承类,VS总是显示类似Count=20的内容,忽略从被重写的ToString()返回的值,因此每次我想查看类摘要时,都必须在QuickWatch窗口中键入变量.ToString()。对于从List继承的类,是否有任何方法可以使VS showToStri

当我创建一个类并重写
ToString()
时,当我在调试器下运行Visual Studio时,我可以用鼠标光标将鼠标悬停在该类型的变量上,VS显示我在方法中返回的任何内容,让我把这个特定类的典型信息和调试期间有价值的信息放在那里。但是,如果我从
列表继承类,VS总是显示类似
Count=20
的内容,忽略从被重写的
ToString()
返回的值,因此每次我想查看类摘要时,都必须在QuickWatch窗口中键入
变量.ToString()
。对于从
List
继承的类,是否有任何方法可以使VS show
ToString()

您需要创建自己的继承.NET
List
类的子类,并重写那里的
ToString()
方法。使用标准
List
语法的任何地方都需要更改以使用新的自定义List类

public class MyList<T> : List<T>
{
    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        foreach (T t in this)
        {
            sb.Append("[" + t.ToString() + "] ");
        }
        return sb.ToString();
    }
}
编辑您的问题:

我建议构建一个公共接口,您可以指定一个特定的模板来匹配列表类的版本,然后可以获取特定的自定义类成员。下面的代码演示

public interface IWidget
{
    string Name { get; }
}

public class Widget : IWidget
{
    public string Name { get; private set; }
    public Widget(string name_) { Name = name_; }
}

[DebuggerDisplay("{this.ToString()}")]
public class MyList<T> : List<T> where T : IWidget
{
    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        foreach (IWidget w in this)
        {
            sb.Append("[" + w.Name + "] ");
        }
        return sb.ToString();
    }
}
公共接口IWidget
{
字符串名称{get;}
}
公共类小部件:IWidget
{
公共字符串名称{get;private set;}
公共小部件(字符串名称){name=name;}
}
[DebuggerDisplay(“{this.ToString()}”)]
公共类MyList:列表,其中T:IWidget
{
公共重写字符串ToString()
{
StringBuilder sb=新的StringBuilder();
foreach(我在这方面做得很好)
{
某人附加(“[”+w.姓名+“]);
}
使某人返回字符串();
}
}

注意:这将限制您可以在自定义集合类中使用的类型,但这可能并不重要,具体取决于您试图实现的目标。

您需要创建自己的子类,该子类继承.NET
列表
类,并覆盖其中的
ToString()
方法。使用标准
List
语法的任何地方都需要更改以使用新的自定义List类

public class MyList<T> : List<T>
{
    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        foreach (T t in this)
        {
            sb.Append("[" + t.ToString() + "] ");
        }
        return sb.ToString();
    }
}
编辑您的问题:

我建议构建一个公共接口,您可以指定一个特定的模板来匹配列表类的版本,然后可以获取特定的自定义类成员。下面的代码演示

public interface IWidget
{
    string Name { get; }
}

public class Widget : IWidget
{
    public string Name { get; private set; }
    public Widget(string name_) { Name = name_; }
}

[DebuggerDisplay("{this.ToString()}")]
public class MyList<T> : List<T> where T : IWidget
{
    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        foreach (IWidget w in this)
        {
            sb.Append("[" + w.Name + "] ");
        }
        return sb.ToString();
    }
}
公共接口IWidget
{
字符串名称{get;}
}
公共类小部件:IWidget
{
公共字符串名称{get;private set;}
公共小部件(字符串名称){name=name;}
}
[DebuggerDisplay(“{this.ToString()}”)]
公共类MyList:列表,其中T:IWidget
{
公共重写字符串ToString()
{
StringBuilder sb=新的StringBuilder();
foreach(我在这方面做得很好)
{
某人附加(“[”+w.姓名+“]);
}
使某人返回字符串();
}
}

注意:这将限制您可以在自定义集合类中使用的类型,但这可能并不重要,具体取决于您试图实现的目标。

好,但我需要在
ToString()
中通过此特定类型的属性进行操作,因此此方法应该知道类型<代码>MyList:List
,然后
MySpecificTypeList:MyList
对我没有帮助,与resultMike相同的计数=20,您运行它来检查结果了吗?我复制并粘贴了您的代码,但不断得到Count=2。请注意:是的,我在一个测试项目中测试了所有这些代码,然后才把它们放上去。在SSCCE中发布您的工作示例,我可以看到发生了什么。我使用的代码与您提供的代码完全相同,按原样复制和粘贴,并且得到相同的计数=2。注意,我说的是将鼠标悬停在
字符串上
变量,它在我的caseman中不运行ToString(),您让我在这里工作:)它看起来像是在执行中断时将鼠标悬停在对象上,VS不会调用对象上的ToString()。您可以通过设置“调试器显示”属性来修复此问题。我已经更新了代码,向您展示了如何做到这一点。现在,所有操作都应该按照您希望的方式进行。好的,但是我需要在
ToString()
中通过此特定类型的属性进行操作,因此此方法应该知道类型<代码>MyList:List,然后
MySpecificTypeList:MyList
对我没有帮助,与resultMike相同的计数=20,您运行它来检查结果了吗?我复制并粘贴了您的代码,但不断得到Count=2。请注意:是的,我在一个测试项目中测试了所有这些代码,然后才把它们放上去。在SSCCE中发布您的工作示例,我可以看到发生了什么。我使用的代码与您提供的代码完全相同,按原样复制和粘贴,并且得到相同的计数=2。注意,我说的是将鼠标悬停在
字符串上
变量,它在我的caseman中不运行ToString(),您让我在这里工作:)它看起来像是在执行中断时将鼠标悬停在对象上,VS不会调用对象上的ToString()。您可以通过设置“调试器显示”属性来修复此问题。我已经更新了代码,向您展示了如何做到这一点。现在,一切都应该按照你想要的方式进行。