Главным, которым Вы должны быть обеспокоены, не является производительность, это - правильность, и от того аспекта метод, который Вы , вероятно хотите использовать для нечувствительного к регистру сравнения, также:
string.Compare(a, b, StringComparison.OrdinalIgnoreCase) == 0;
или
a.Equals(b, StringComparison.OrdinalIgnoreCase)
(Первый полезен, если Вы знаете, строки могут быть пустыми; последний более прост записать, знаете ли Вы уже, что по крайней мере одна строка является непустой. Я никогда не проверял производительность, но предполагаю, что это будет подобно.)
Ordinal
или OrdinalIgnoreCase
безопасная ставка, если Вы не знаете, что хотите использовать другой метод сравнения; получить информацию должно было принять решение , читает эту статью о MSDN.
WPF объединит метаданные свойств для вас, когда вы вызываете OverrideMetadata, нет необходимости передавать их исходный объект метаданных. Итак, все, что вам нужно сделать, это
UIElement.RenderTransformOriginProperty.OverrideMetadata(typeof(foo), new PropertyMetadata(new PropertyChangedCallback(Origin_Changed)));
Одна вещь, о которой следует помнить, - иногда приведенный выше код вызывает исключение. Это происходит в двух случаях:
1. Исходные метаданные являются подклассом PropertyMetadata - я видел FrameworkPropertyMetadata и UIPropertyMetadata. Вам просто нужно использовать соответствующий в каждом случае.
2. Свойство зависимости доступно только для чтения, и вы ничего не можете с этим поделать.