Если бы это было не string
, что бы вы предложили? Это не может быть PropertyInfo
, так как не все типы, которые поддерживают это, используют статическое типирование - например, DataTable
предоставляет настраиваемую модель свойств для целей привязки, так как не многие другие типы (через любой из ICustomTypeDescriptor
, TypeDescriptionProvider
или ITypedList
).
Даже если был в PropertyInfo
, или даже если это был PropertyDescriptor
, вы не могли бы сделать сравнение по этому вопросу: а: это заняло бы много работы, чтобы получить контрольный поиск, б: вы даже не гарантированы (например, для PropertyDescriptor
), чтобы вернуть тот же объект каждый раз, когда вы смотрите.
Значит, вы, вероятно, в конечном итоге сравниваете имя (a string
) в любом случае.
С помощью string
, это дешево, чтобы поднять это событие, и довольно дешево сравнить - сравнение строк довольно быстро, учитывая, что большинство имен свойств довольно короткие, а почти все - менее 30 символов. Это будет очень быстро сравнивать, и это не узкое место. В большинстве случаев «что делать теперь, когда он изменился» займет лот больше времени, чем сравнение этой строки.
Я не имею осуществления передо мной, но я бы надежда, что проверка строки равенство в основном:
- же ссылка? возврат подлинный
- другой длина? return false
- сравнить char-by-char; вернуться ложным в первой разности
- возвращающие
поэтому он не должен даже быть проблемой, если все ваши имена свойств не являются: такой же длины, и б: очень значительная длина
В основном: не беспокойтесь об этом.
Что относительно струн, которые являются Interned? –
Не всегда верно: http://blogs.msdn.com/b/ericlippert/archive/2009/09/28/string-interning-and-string-empty.aspx –
@ Ссылки HarisHasan могут быть явно извлечены с помощью 'String. Intern'. –