У меня проблема. Я программист 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);
}
}
}
Я действительно не могу найти решение для этого! Любая помощь?
спасибо
Похоже, вы просто не заметили, что синтаксис индексатора на С# является [key]
. Я подозреваю, что вы хотите:
if (TypeDescriptor.GetProperties(this)[propertyName] == null)
Сначала он GetProperties
метод GetProperties
, чтобы найти PropertyDescriptorCollection
всех свойств this
... затем он использует индексатор PropertyDescriptorCollection
для доступа к определенному свойству по имени.
Попробуй это:
[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);
}
}
}
Вы также можете использовать функцию "Найти":
if (TypeDescriptor.GetProperties(this).Find(propertyName, false) == null)
Обратите внимание, что это делает поиск с учетом регистра.