1- // Copyright (C) 2003- 2012 Xtensive LLC.
2- // All rights reserved .
3- // For conditions of distribution and use, see license .
1+ // Copyright (C) 2012-2021 Xtensive LLC.
2+ // This code is distributed under MIT license terms .
3+ // See the License.txt file in the project root for more information .
44// Created by: Denis Krjuchkov
55// Created: 2012.12.29
66
@@ -63,6 +63,8 @@ private static class ValueFieldAccessorResolver
6363 private static readonly Type NullableDecimalType = typeof ( decimal ? ) ;
6464 private static readonly Type GuidType = typeof ( Guid ) ;
6565 private static readonly Type NullableGuidType = typeof ( Guid ? ) ;
66+ private static readonly Type DateTimeOffsetType = typeof ( DateTimeOffset ) ;
67+ private static readonly Type NullableDateTimeOffsetType = typeof ( DateTimeOffset ? ) ;
6668
6769 private static readonly ValueFieldAccessor BoolAccessor = new BooleanFieldAccessor ( ) ;
6870 private static readonly ValueFieldAccessor ByteAccessor = new ByteFieldAccessor ( ) ;
@@ -79,48 +81,55 @@ private static class ValueFieldAccessorResolver
7981 private static readonly ValueFieldAccessor TimeSpanAccessor = new TimeSpanFieldAccessor ( ) ;
8082 private static readonly ValueFieldAccessor DecimalAccessor = new DecimalFieldAccessor ( ) ;
8183 private static readonly ValueFieldAccessor GuidAccessor = new GuidFieldAccessor ( ) ;
84+ private static readonly ValueFieldAccessor DateTimeOffsetAccessor = new DateTimeOffsetFieldAccessor ( ) ;
8285
8386 private static readonly int NullableTypeMetadataToken = typeof ( Nullable < > ) . MetadataToken ;
8487
8588 public static ValueFieldAccessor GetValue ( Type probeType )
8689 {
87- ValueFieldAccessor ResolveByType ( Type type ) =>
88- ReferenceEquals ( type , BoolType ) ? BoolAccessor :
89- ReferenceEquals ( type , ByteType ) ? ByteAccessor :
90- ReferenceEquals ( type , SByteType ) ? SByteAccessor :
91- ReferenceEquals ( type , Int16Type ) ? Int16Accessor :
92- ReferenceEquals ( type , UInt16Type ) ? UInt16Accessor :
93- ReferenceEquals ( type , Int32Type ) ? Int32Accessor :
94- ReferenceEquals ( type , UInt32Type ) ? UInt32Accessor :
95- ReferenceEquals ( type , Int64Type ) ? Int64Accessor :
96- ReferenceEquals ( type , UInt64Type ) ? UInt64Accessor :
97- ReferenceEquals ( type , SingleType ) ? SingleAccessor :
98- ReferenceEquals ( type , DoubleType ) ? DoubleAccessor :
99- ReferenceEquals ( type , DateTimeType ) ? DateTimeAccessor :
100- ReferenceEquals ( type , TimeSpanType ) ? TimeSpanAccessor :
101- ReferenceEquals ( type , DecimalType ) ? DecimalAccessor :
102- ReferenceEquals ( type , GuidType ) ? GuidAccessor : null ;
103-
104- ValueFieldAccessor ResolveByNullableType ( Type type ) =>
105- ReferenceEquals ( type , NullableBoolType ) ? BoolAccessor :
106- ReferenceEquals ( type , NullableByteType ) ? ByteAccessor :
107- ReferenceEquals ( type , NullableSByteType ) ? SByteAccessor :
108- ReferenceEquals ( type , NullableInt16Type ) ? Int16Accessor :
109- ReferenceEquals ( type , NullableUInt16Type ) ? UInt16Accessor :
110- ReferenceEquals ( type , NullableInt32Type ) ? Int32Accessor :
111- ReferenceEquals ( type , NullableUInt32Type ) ? UInt32Accessor :
112- ReferenceEquals ( type , NullableInt64Type ) ? Int64Accessor :
113- ReferenceEquals ( type , NullableUInt64Type ) ? UInt64Accessor :
114- ReferenceEquals ( type , NullableSingleType ) ? SingleAccessor :
115- ReferenceEquals ( type , NullableDoubleType ) ? DoubleAccessor :
116- ReferenceEquals ( type , NullableDateTimeType ) ? DateTimeAccessor :
117- ReferenceEquals ( type , NullableTimeSpanType ) ? TimeSpanAccessor :
118- ReferenceEquals ( type , NullableDecimalType ) ? DecimalAccessor :
119- ReferenceEquals ( type , NullableGuidType ) ? GuidAccessor : null ;
120-
12190 return ( probeType . MetadataToken ^ NullableTypeMetadataToken ) == 0
12291 ? ResolveByNullableType ( probeType )
12392 : ResolveByType ( probeType ) ;
93+
94+ ValueFieldAccessor ResolveByType ( Type type )
95+ {
96+ return ReferenceEquals ( type , BoolType ) ? BoolAccessor :
97+ ReferenceEquals ( type , ByteType ) ? ByteAccessor :
98+ ReferenceEquals ( type , SByteType ) ? SByteAccessor :
99+ ReferenceEquals ( type , Int16Type ) ? Int16Accessor :
100+ ReferenceEquals ( type , UInt16Type ) ? UInt16Accessor :
101+ ReferenceEquals ( type , Int32Type ) ? Int32Accessor :
102+ ReferenceEquals ( type , UInt32Type ) ? UInt32Accessor :
103+ ReferenceEquals ( type , Int64Type ) ? Int64Accessor :
104+ ReferenceEquals ( type , UInt64Type ) ? UInt64Accessor :
105+ ReferenceEquals ( type , SingleType ) ? SingleAccessor :
106+ ReferenceEquals ( type , DoubleType ) ? DoubleAccessor :
107+ ReferenceEquals ( type , DateTimeType ) ? DateTimeAccessor :
108+ ReferenceEquals ( type , TimeSpanType ) ? TimeSpanAccessor :
109+ ReferenceEquals ( type , DecimalType ) ? DecimalAccessor :
110+ ReferenceEquals ( type , GuidType ) ? GuidAccessor :
111+ ReferenceEquals ( type , DateTimeOffsetType ) ? DateTimeOffsetAccessor : null ;
112+ }
113+
114+ ValueFieldAccessor ResolveByNullableType ( Type type )
115+ {
116+ return ReferenceEquals ( type , NullableBoolType ) ? BoolAccessor :
117+ ReferenceEquals ( type , NullableByteType ) ? ByteAccessor :
118+ ReferenceEquals ( type , NullableSByteType ) ? SByteAccessor :
119+ ReferenceEquals ( type , NullableInt16Type ) ? Int16Accessor :
120+ ReferenceEquals ( type , NullableUInt16Type ) ? UInt16Accessor :
121+ ReferenceEquals ( type , NullableInt32Type ) ? Int32Accessor :
122+ ReferenceEquals ( type , NullableUInt32Type ) ? UInt32Accessor :
123+ ReferenceEquals ( type , NullableInt64Type ) ? Int64Accessor :
124+ ReferenceEquals ( type , NullableUInt64Type ) ? UInt64Accessor :
125+ ReferenceEquals ( type , NullableSingleType ) ? SingleAccessor :
126+ ReferenceEquals ( type , NullableDoubleType ) ? DoubleAccessor :
127+ ReferenceEquals ( type , NullableDateTimeType ) ? DateTimeAccessor :
128+ ReferenceEquals ( type , NullableTimeSpanType ) ? TimeSpanAccessor :
129+ ReferenceEquals ( type , NullableDecimalType ) ? DecimalAccessor :
130+ ReferenceEquals ( type , NullableGuidType ) ? GuidAccessor :
131+ ReferenceEquals ( type , NullableDateTimeOffsetType ) ? DateTimeOffsetAccessor : null ;
132+ }
124133 }
125134 }
126135
0 commit comments