Skip to content

Commit a0a99b1

Browse files
committed
convert FromNameKey to be a readonly struct instead of a class
1 parent 7811d57 commit a0a99b1

File tree

1 file changed

+12
-27
lines changed

1 file changed

+12
-27
lines changed

src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/DependencyProperty.cs

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)