Skip to content

Commit ff73cb7

Browse files
authored
CSHARP-5664: Remove allocation in BsonClassMap.GetDiscriminatorConvention (#1768)
1 parent b11b925 commit ff73cb7

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

src/MongoDB.Bson/Serialization/BsonClassMap.cs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,21 +1329,26 @@ internal IDiscriminatorConvention GetDiscriminatorConvention()
13291329

13301330
if (discriminatorConvention != null)
13311331
{
1332-
var conflictingMemberMap = _allMemberMaps.FirstOrDefault(memberMap => memberMap.ElementName == discriminatorConvention.ElementName);
1333-
1334-
if (conflictingMemberMap != null)
1335-
{
1336-
var fieldOrProperty = conflictingMemberMap.MemberInfo is FieldInfo ? "field" : "property";
1337-
1338-
throw new BsonSerializationException(
1339-
$"The discriminator element name cannot be {discriminatorConvention.ElementName} " +
1340-
$"because it is already being used by the {fieldOrProperty} {conflictingMemberMap.MemberName} of type {_classType.FullName}");
1341-
}
1332+
EnsureNoMemberMapConflicts(discriminatorConvention.ElementName);
13421333
}
13431334
}
13441335

13451336
return discriminatorConvention;
13461337

1338+
void EnsureNoMemberMapConflicts(string elementName)
1339+
{
1340+
var conflictingMemberMap = _allMemberMaps.FirstOrDefault(memberMap => memberMap.ElementName == elementName);
1341+
1342+
if (conflictingMemberMap != null)
1343+
{
1344+
var fieldOrProperty = conflictingMemberMap.MemberInfo is FieldInfo ? "field" : "property";
1345+
1346+
throw new BsonSerializationException(
1347+
$"The discriminator element name cannot be {discriminatorConvention.ElementName} " +
1348+
$"because it is already being used by the {fieldOrProperty} {conflictingMemberMap.MemberName} of type {_classType.FullName}");
1349+
}
1350+
}
1351+
13471352
IDiscriminatorConvention LookupDiscriminatorConvention()
13481353
{
13491354
var classMap = this;

0 commit comments

Comments
 (0)