c # переопределяет ToString MyList & lt; T & gt; не показан в VS [дубликат]

>>> def a():
>>>    print "a executed"
>>>    return []
>>> x =a()
a executed
>>> def b(m=[]):
>>>    m.append(5)
>>>    print m
>>> b(x)
[5]
>>> b(x)
[5, 5]
11
задан sgtz 26 July 2011 в 12:10
поделиться

7 ответов

Отметьте свой класс с помощью

[System.Diagnostics.DebuggerDisplay("{ToString()}")]

Тест:

[System.Diagnostics.DebuggerDisplay("{ToString()}")]
class MyClass
{
    private string _foo = "This is the text that will be displayed at debugging"

    public override string ToString()
    {
        return _foo;
    }
}

Теперь, когда вы наводите указатель мыши на переменную с помощью мыши, он будет показывать This is the text that will be displayed at debugging.

23
ответ дан BJ Myers 20 August 2018 в 21:40
поделиться

То, что вы ищете, это DebuggerDisplayAttribute:

http://www.codeproject.com/Articles/117477/Using-DebuggerDisplayAttribute

Используйте приведенную выше ссылку, чтобы узнать, как это делается, а затем примените ее к вашему классу, используя метод ToString(), чтобы управлять показанным. Я только использовал свойства, не уверен, что вы можете вводить классы.

4
ответ дан Adam Houldsworth 20 August 2018 в 21:40
поделиться
  • 1
    +1 может принимать только один ответ, но эта ссылка дает мне немедленный пример того, что возможно. – sgtz 26 July 2011 в 12:41
1
ответ дан BigMan73 20 August 2018 в 21:40
поделиться

Имеется DebuggerDisplayAttribute , который позволяет влиять на отображение. Это позволяет вам писать довольно сложные выражения для вывода отладочного вывода, хотя не рекомендуется делать это .

Однако, если вы переопределили ToString, отладчик задокументировано, чтобы отобразить это по умолчанию. Может быть, что-то не так с кодом?

7
ответ дан Jon 20 August 2018 в 21:40
поделиться
  • 1
    Извините, у меня есть неправильная кнопка редактирования, и мой возврат перекрывается со вторым изменением :( – Zebi 26 July 2011 в 12:09
  • 2
    @Zebi: Откинулся назад, не беспокойтесь. – Jon 26 July 2011 в 12:10
  • 3
  • 4
    @sgtz: они означают, что this доступен для использования в выражении («имеет доступ»), и вам не нужно вводить его («подразумевается»). В основном, что происходит с this, например. внутри метода класса. – Jon 26 July 2011 в 12:52
  • 5
    Если ToString() выбрасывает исключение , то отладчик VS не отображает это значение. DebuggerDisplayAttribute заставит отображать сообщение об исключении. Но обычно вам не нужно это делать. – swdev 3 October 2015 в 08:39

в объекте Переопределите .ToString следующим образом:

public class MyObject
{
        public int Property1{ get; set; }
        public string Property2{ get; set; }
        public string Property3 { get; set; }

        public override string ToString()
        {
            return Property3;
        }
}

Это вернет свойство3 в качестве значения ToString ()

1
ответ дан stack72 20 August 2018 в 21:40
поделиться

Если вы используете визуальную студию, вы можете добавить watch @ runtime om в строку yourvariable.ToString (), это будет отображаться в нижней части экрана при попадании на точку останова

0
ответ дан Thomas 20 August 2018 в 21:40
поделиться
  • 1
    Хотя добавление переменной часов служит своей цели, оно не отвечает на вопрос. Вопрос заключался в том, как сделать ваш переменный дисплей всплывающей подсказкой, когда вы наводите на него курсор в режиме отладки. – John C 15 October 2012 в 05:23

Выход ToString должен быть по умолчанию, который вы видите при отладке.

Его можно переопределить с помощью атрибута DebuggerDisplay (см. MSDN ).

Я предпочитаю переопределять метод ToString, потому что он проще и универсальнее, потому что он помогает при записи в файлы журнала.

Какой вывод вы видите? Если вы получите имя типа, вы увидите по умолчанию ToString.

4
ответ дан Zebi 20 August 2018 в 21:40
поделиться
  • 1
    +1. ти. ToString кажется естественным местом для этого в большинстве случаев. – sgtz 26 July 2011 в 12:44
Другие вопросы по тегам:

Похожие вопросы: