Skip to content

Commit

Permalink
Merge pull request #55 from xin9le/hotfix/#54
Browse files Browse the repository at this point in the history
Fix `.GetName()` method inconsistency for enums with duplicate values
  • Loading branch information
xin9le authored Dec 12, 2024
2 parents acb66b1 + e0445f4 commit a250113
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,17 @@ public void GetName()
FastEnum.GetName(ContinuousValueEnum.C).Should().Be(nameof(ContinuousValueEnum.C));
FastEnum.GetName(ContinuousValueEnum.D).Should().Be(nameof(ContinuousValueEnum.D));
FastEnum.GetName(ContinuousValueEnum.E).Should().Be(nameof(ContinuousValueEnum.E));

FastEnum.GetName(ContinuousValueContainsSameValueEnum.A).Should().Be(nameof(ContinuousValueContainsSameValueEnum.A));
FastEnum.GetName(ContinuousValueContainsSameValueEnum.B).Should().Be(nameof(ContinuousValueContainsSameValueEnum.B));
FastEnum.GetName(ContinuousValueContainsSameValueEnum.C).Should().Be(nameof(ContinuousValueContainsSameValueEnum.C));
FastEnum.GetName(ContinuousValueContainsSameValueEnum.D).Should().Be(nameof(ContinuousValueContainsSameValueEnum.C)); // should be same as C
FastEnum.GetName(ContinuousValueContainsSameValueEnum.E).Should().Be(nameof(ContinuousValueContainsSameValueEnum.E));

FastEnum.GetName(NotContinuousValueEnum.A).Should().Be(nameof(NotContinuousValueEnum.A));
FastEnum.GetName(NotContinuousValueEnum.B).Should().Be(nameof(NotContinuousValueEnum.B));
FastEnum.GetName(NotContinuousValueEnum.C).Should().Be(nameof(NotContinuousValueEnum.C));
FastEnum.GetName(NotContinuousValueEnum.D).Should().Be(nameof(NotContinuousValueEnum.D));
FastEnum.GetName(NotContinuousValueEnum.E).Should().Be(nameof(NotContinuousValueEnum.E));
}
}
11 changes: 6 additions & 5 deletions src/libs/FastEnum.Core/Internals/EnumInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,14 @@ static EnumInfo()
s_names = Enum.GetNames(s_type);
s_values = (T[])Enum.GetValues(s_type);
s_members = s_names.Select(static x => new Member<T>(x)).ToArray();
s_orderedMembers = s_members.OrderBy(static x => x.Value).ToArray();
s_orderedMembers
= s_members
.OrderBy(static x => x.Value)
.DistinctBy(static x => x.Value)
.ToArray();
s_memberByNameCaseSensitive = s_members.ToCaseSensitiveStringDictionary(static x => x.Name);
s_memberByNameCaseInsensitive = s_members.ToCaseInsensitiveStringDictionary(static x => x.Name);
s_memberByValue
= s_orderedMembers
.DistinctBy(static x => x.Value)
.ToFastReadOnlyDictionary(static x => x.Value);
s_memberByValue = s_orderedMembers.ToFastReadOnlyDictionary(static x => x.Value);
s_minValue = s_values.DefaultIfEmpty().Min();
s_maxValue = s_values.DefaultIfEmpty().Max();
s_isContinuous = isContinuous(s_memberByValue.Count, s_maxValue, s_minValue);
Expand Down

0 comments on commit a250113

Please sign in to comment.