@@ -257,7 +257,7 @@ private static void RegisterParameterValidation(string name, Type propertyType,
257257
258258 private static DependencyProperty RegisterCommon ( string name , Type propertyType , Type ownerType , PropertyMetadata defaultMetadata , ValidateValueCallback validateValueCallback )
259259 {
260- FromNameKey key = new FromNameKey ( name , ownerType ) ;
260+ FromNameKey key = new ( name , ownerType ) ;
261261 lock ( Synchronized )
262262 {
263263 if ( PropertyFromName . ContainsKey ( key ) )
@@ -761,7 +761,7 @@ public DependencyProperty AddOwner(Type ownerType, PropertyMetadata typeMetadata
761761
762762 // Map owner type to this property
763763 // Build key
764- FromNameKey key = new FromNameKey ( Name , ownerType ) ;
764+ FromNameKey key = new ( Name , ownerType ) ;
765765
766766 lock ( Synchronized )
767767 {
@@ -776,13 +776,11 @@ public DependencyProperty AddOwner(Type ownerType, PropertyMetadata typeMetadata
776776 OverrideMetadata ( ownerType , typeMetadata ) ;
777777 }
778778
779-
780779 lock ( Synchronized )
781780 {
782781 PropertyFromName [ key ] = this ;
783782 }
784783
785-
786784 return this ;
787785 }
788786
@@ -979,19 +977,20 @@ internal static DependencyProperty FromName(string name, Type ownerType)
979977 ArgumentNullException . ThrowIfNull ( name ) ;
980978 ArgumentNullException . ThrowIfNull ( ownerType ) ;
981979
982- FromNameKey key = new FromNameKey ( name , ownerType ) ;
980+ FromNameKey key ;
983981
984982 while ( ( dp == null ) && ( ownerType != null ) )
985983 {
986984 // Ensure static constructor of type has run
987985 MS . Internal . WindowsBase . SecurityHelper . RunClassConstructor ( ownerType ) ;
988986
989987 // Locate property
990- key . UpdateNameKey ( ownerType ) ;
988+ key = new FromNameKey ( name , ownerType ) ;
991989
992990 lock ( Synchronized )
993991 {
994- dp = PropertyFromName [ key ] ;
992+ if ( PropertyFromName . TryGetValue ( key , out dp ) )
993+ return dp ;
995994 }
996995
997996 ownerType = ownerType . BaseType ;
@@ -1033,7 +1032,7 @@ internal static bool IsValidType(object value, Type propertyType)
10331032 return true ;
10341033 }
10351034
1036- private class FromNameKey
1035+ private readonly struct FromNameKey : IEquatable < FromNameKey >
10371036 {
10381037 public FromNameKey ( string name , Type ownerType )
10391038 {
@@ -1043,39 +1042,25 @@ public FromNameKey(string name, Type ownerType)
10431042 _hashCode = _name . GetHashCode ( ) ^ _ownerType . GetHashCode ( ) ;
10441043 }
10451044
1046- public void UpdateNameKey ( Type ownerType )
1047- {
1048- _ownerType = ownerType ;
1049-
1050- _hashCode = _name . GetHashCode ( ) ^ _ownerType . GetHashCode ( ) ;
1051- }
1052-
10531045 public override int GetHashCode ( )
10541046 {
10551047 return _hashCode ;
10561048 }
10571049
10581050 public override bool Equals ( object o )
10591051 {
1060- if ( ( o != null ) && ( o is FromNameKey ) )
1061- {
1062- return Equals ( ( FromNameKey ) o ) ;
1063- }
1064- else
1065- {
1066- return false ;
1067- }
1052+ return o is FromNameKey key && Equals ( key ) ;
10681053 }
10691054
10701055 public bool Equals ( FromNameKey key )
10711056 {
1072- return ( _name . Equals ( key . _name ) && ( _ownerType == key . _ownerType ) ) ;
1057+ return _name . Equals ( key . _name ) && _ownerType == key . _ownerType ;
10731058 }
10741059
1075- private string _name ;
1076- private Type _ownerType ;
1060+ private readonly string _name ;
1061+ private readonly Type _ownerType ;
10771062
1078- private int _hashCode ;
1063+ private readonly int _hashCode ;
10791064 }
10801065
10811066
0 commit comments