2013-07-27 7 views
1

У меня есть свойство пользовательского класса в C#, которое я переопределил setter for. Я хочу, чтобы сравнить свойства/в пользовательском классе в инкубаторе, как следующее:Compare value member при настройке свойства

public DatabaseInfo CurrentDatabaseManagedSelection 
{ 
    get { return CurrentDatabaseManaged; } 
    set { 
     if (String.Equals(value.Name, CurrentDatabaseManaged.Name,StringComparison.OrdinalIgnoreCase))  
       return; 
     CurrentDatabaseManaged = DatabaseManagement.ReadDatabase(value.FileName); 
     } 
} 

Внутри класса DatabaseInfo, есть стандартная строка свойство называется именем.

Однако, когда я запускаю программу, я получаю следующее исключение. Может ли кто-нибудь сказать мне, почему это происходит и как решить проблему, пожалуйста?

Исключение было выбрано целью вызова.

EDIT: Я устанавливаю значение свойства, для которого установлен сеттер, в конструкторе модели представления. Я делаю это просто, установив CurrentDatabaseManagedSelection, равный объекту класса DatabaseInfo.

+1

Мы - _at наименее me_ - может потребоваться дополнительная информация. Следующие будут работать без проблем 'set {if (string.Equals (value, Name)) return; _name = value;} 'в базовой структуре класса. Можно ли дать полное определение свойства, чтобы мы могли видеть, как оно определено? Также как вы устанавливаете его в конструкторе? –

+0

@MechnicalObject Хорошо, я обновлю вопрос, чтобы добавить дополнительную информацию за минуту :) – Andy

+1

@ Энди скажу мне внутреннее исключение. Он должен быть связан с нулевой ссылкой – Ehsan

ответ

0

Думаю, что я нашел проблему ... Ну, я решил!

Вопрос был CurrentDatabaseManaged не был инициализирован и поэтому был равен null, когда я попытался установить вышеуказанное свойство. Я обнаружил это, добавив try .. catch в методе setter и создал новую String для CurrentDatabaseManaged.Name - трассировку стека, указывающую на эту строку.

Надеюсь, что это поможет кому-то еще в будущем.

+1

Приятно слышать, что вы нашли проблему. Вы также можете добавить закрытие защиты _if еще не сделано в 'ReadDatabase (value.FileName);' метод, чтобы определить, как ваш метод будет реагировать при передаче пустой или пустой строки. –

+1

@MechanicalObject Да, я уже это сделал, но спасибо за пособие – Andy