одноэлементные поля не отображаются в отладчике при использовании метода Instance - PullRequest
0 голосов
/ 10 февраля 2020

Рассмотрим типичный одноэлементный класс

public class Singleton{

    private static Singleton _instance;
    private static Singleton ThisInstance {
        get => _instance;
        set => _instance = value;
    }

    public static Instance()
    {
        lock(_lockThis) {
            return ThisInstance ?? (ThisInstance = new Singleton());
        }
    }

    private Singleton(){}

    public bool Field1 { get; set; }
    public int Field2 { get; set; }
    ...
}

Проблема в том, что я пытаюсь отладить что-нибудь простое, например, предикат команды:

public bool CommandPredicate(object obj){
    return Singleton.Instance().Field1 == true &&
           Singleton.Instance().Field2 > 10;
}

Значения Поле1 и Field2 следуют после Instance () , поэтому они невидимы. При наведении курсора на эти поля ничего не происходит.

Единственный способ, который я нашел, - это присвоить Instance переменной, например:

public bool CommandPredicate(object obj){
    var a = Singleton.Instance(); 
    return a.Field1 == true &&
           a.Field2 > 10;
}

Тогда вы можете увидеть все значения a в отладчике.

Существует ли какой-либо стандартный и элегантный подход для просмотра одноэлементных полей?

1 Ответ

1 голос
/ 10 февраля 2020

Измените метод Instance() на свойство - тогда отладчик покажет значения.

Возможно, вы захотите создать экземпляр в конструкторе stati c, чтобы избежать проблем с многопоточностью:

public class Singleton{

    private static Singleton _instance = new Singleton();
    public static Singleton Instance { 
        get => _instance;
    }
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...