Есть ли способ узнать, было ли установлено свойство или переменная? - PullRequest
3 голосов
/ 23 декабря 2010

Согласно заголовку, могу ли я узнать историю свойства или переменной с точки зрения того, было ли оно установлено или нет?

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

В настоящее время я просто пытаюсь добавить экземпляр PropertyInfo (мне нужно имя свойства, это важно для генерации запроса из-за сопоставлений) всписок свойств, которые были установлены в наборе {}.Это уродливо, хотя и требует больше кода для того, что должно быть классами, которые содержат только свойства и не содержат логику (то есть не удаляют вещи из списка).метод?

Ответы [ 2 ]

4 голосов
/ 23 декабря 2010

Предполагая, что вы говорите о динамических объектах, вы можете проверить на нулевое значение, используя отражение, но это ничего не скажет, если исходное значение было нулевым (или ноль в случае числовых типов данных).

Но лучший способ - заставить его реализовать INotifyPropertyChanged и иметь список свойств, которые были материализованы.

public class Item : INotifyPropertyChanged
{
    private List<string> _MaterializedPropertiesInternal;
    private List<string> MaterializedPropertiesInternal
    {
        get
        {
            if (_MaterializedPropertiesInternal==null) 
                _MaterializedPropertiesInternal = new List<string>();
            return _MaterializedPropertiesInternal;
        }
    }

    private ReadOnlyCollection<string> _MaterializedProperties;
    public IEnumerable<string> MaterializedProperties
    {
        get 
        {
            if (_MaterializedProperties==null) _MaterializedProperties = 
              new ReadOnlyCollection<string>(MaterializedPropertiesInternal);
            return _MaterializedProperties;
        }
    }

    private int _MyProperty;
    public int MyProperty
    {
        get { return _MyProperty; }
        set
        {
            _MyProperty = value;
            OnPropertyChanged("MyProperty");
        }
    }

    protected void OnPropertyChanged(string propertyName)
    {
        if(PropertyChanged != null) PropertyChanged(this, 
          new PropertyChangedEventArgs(propertyName));
        MaterializedPropertiesInternal.Add(propertyName);
    }


    public event PropertyChangedEventHandler PropertyChanged;
}
3 голосов
/ 23 декабря 2010

Сделайте свойства обнуляемыми, например типа int? вместо типа int, поэтому их значение равно null, если они не были установлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...