Skip to content

Commit 38f1efc

Browse files
committed
Use MetadataToken to detect if type is nullable (this is a little bit faster than IsGeneric)
1 parent a865d16 commit 38f1efc

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

Orm/Xtensive.Orm/Tuples/Packed/TupleLayout.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ private static class ValueFieldAccessorResolver
100100
private static readonly ValueFieldAccessor DecimalAccessor = new DecimalFieldAccessor();
101101
private static readonly ValueFieldAccessor GuidAccessor = new GuidFieldAccessor();
102102

103+
private static readonly int NullableTypeMetadataToken = typeof(Nullable<>).MetadataToken;
104+
103105
public static ValueFieldAccessor GetValue(Type probeType)
104106
{
105107
ValueFieldAccessor ResolveByType(Type type) =>
@@ -136,7 +138,9 @@ ValueFieldAccessor ResolveByNullableType(Type type) =>
136138
ReferenceEquals(type, NullableDecimalType) ? DecimalAccessor :
137139
ReferenceEquals(type, NullableGuidType) ? GuidAccessor : null;
138140

139-
return probeType.IsGenericType ? ResolveByNullableType(probeType) : ResolveByType(probeType);
141+
return (probeType.MetadataToken ^ NullableTypeMetadataToken)==0
142+
? ResolveByNullableType(probeType)
143+
: ResolveByType(probeType);
140144
}
141145
}
142146

0 commit comments

Comments
 (0)