ожидается имя метода c # INotifypropertyChanged

1

У меня проблема. Я программист VB.net, и я пытаюсь изучить С#. Во многих проектах VB, которые я сделал, я всегда использовал класс viewModelBase где я могу уведомлять свои свойства над своим проектом, когда я пытаюсь преобразовать код из vb в С#. Я получаю method name expected в строке: if (TypeDescriptor.GetProperties(this)(propertyName) == null)

[Conditional("DEBUG"), DebuggerStepThrough()]
    public void VerifyPropertyName(string propertyName)
    {
        if (TypeDescriptor.GetProperties(this)(propertyName) == null)
        {
            string msg = "Invalid property name: " + propertyName;

            if (this.ThrowOnInvalidPropertyName)
            {
                throw new Exception(msg);
            }
            else
            {
                Debug.Fail(msg);
            }
        }
    }

Я действительно не могу найти решение для этого! Любая помощь?

спасибо

Теги:
inotifypropertychanged

3 ответа

7
Лучший ответ

Похоже, вы просто не заметили, что синтаксис индексатора на С# является [key]. Я подозреваю, что вы хотите:

if (TypeDescriptor.GetProperties(this)[propertyName] == null)

Сначала он GetProperties метод GetProperties, чтобы найти PropertyDescriptorCollection всех свойств this... затем он использует индексатор PropertyDescriptorCollection для доступа к определенному свойству по имени.

  • 0
    Я забыл VB использует () для индексации массива. Хороший улов!
  • 0
    Да, вот и все, что индексация в C # выполняется с помощью [], а не () ... ну, мне действительно нужно это добавить в мою голову! Спасибо.
0

Попробуй это:

    [Conditional("DEBUG"), DebuggerStepThrough()]
    public void VerifyPropertyName(string propertyName)
    {
        PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(this);
        var objValue = properties[propertyName].GetValue(this);
        if (objValue == null)
        {
            string msg = "Invalid property name: " + propertyName;

            if (this.ThrowOnInvalidPropertyName)
            {
                throw new Exception(msg);
            }
            else
            {
                Debug.Fail(msg);
            }
        }
    }
0

Вы также можете использовать функцию "Найти":

if (TypeDescriptor.GetProperties(this).Find(propertyName, false) == null)

MSDN

Обратите внимание, что это делает поиск с учетом регистра.

  • 0
    Спасибо за ваш ответ, но @Jon Skeet был лучше!
  • 0
    @Rui, нет проблем, я согласен, что его подход лучше, но нашел этот подход в своих исследованиях, поэтому я решил поделиться! Рад, что вы решили свою проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню