Visual Studio调试器中的花括号是什么意思?

时间:2017-11-07 18:47:47

标签: c# visual-studio visual-studio-2017

我已经看过这个问题,但我认为我的情况有所不同:What does it mean in Visual Studio debugger value "{ }"?

我不会看到大括号,而是我认为我看到了一种类型。无论如何,这就是我所看到的:

enter image description here

对于res,我看到{System.Net.Http.StreamContent}。相反,我期望/希望看到的东西就像" [内容在这里]"。这就是我所说的:

var res = await client.PostAsync(endpoint, content); 有谁知道为什么它显示类型,以及如何解决这个问题? THX

3 个答案:

答案 0 :(得分:2)

当您使用调试器时,它会对您正在查看的任何对象使用ToString()方法。所以如果你调试这段代码:

public void Debugging()
{
    MyClass fancyVariable = new MyClass();
    // debugging fancyVariable here
}
public class MyClass
{
    public int val;
}

...调试'fancyVariable'只会说:{Namespace.MyClass}

但是!如果您将其更改为:

public class MyClass
{
    public int val;
    public override string ToString()
    {
        return "Value=" + this.val;
    }
}

...然后当你“注意”那个变量时,调试会说“Value = 0”。

那么为什么使用{ClassName}进行调试?因为使用ToString()很难很好地表示很多类 - 要么是因为没有一种简单的方法可以快速简单地总结数据,要么因为获取这些信息会导致问题(或者因为它可能需要太长时间,或者因为它会导致功能问题。)StreamContent几乎所有这些问题 - 使用blurb表示并不容易,从流中提取数据可能需要一些时间,这可能会导致从流中拉出的功能问题。所以它只有一个返回其类名的ToString()。

如果您希望获得一些乐趣,请阅读一些内置的.NET类,并查看哪些在ToString()中呈现模糊,哪些在{Something.ClassName} < / p>

(这也是为什么你应该总是至少考虑为你编写的任何类覆盖ToString()方法的一个教训:使类的调试问题更容易。)

答案 1 :(得分:2)

我认为这可能是有意的。

你肯定会看到这种类型。 client.PostAsync方法的内容类型为System.Net.Http.HttpContent,特别是System.Net.Http.StreamContent。

如果Content类型是字符串,那么您可能会看到类似“Content string”的内容

为了阅读内容,您必须执行以下操作:

var contents = await res.Content.ReadAsStringAsync();

希望这有帮助!

https://msdn.microsoft.com/en-us/library/hh138242(v=vs.118).aspx

答案 2 :(得分:1)

  

对于res,我看到{System.Net.Http.StreamContent}。相反,我期望/希望看到的东西就像&#34; [内容在这里]&#34;。

但是res不是内容,它是一个System.Net.Http.StreamContent对象,因此它告诉你想要它。 您无法更改这些类的工作方式。您要查找的值包含在内容中,但这是一个流,它并不总是具有已知状态,因此您无法真正查看它的值。