55
66namespace Mvc . JQuery . Datatables
77{
8- static class StringTransformers
8+ public static class StringTransformers
99 {
1010 internal static object GetStringedValue ( Type propertyType , object value )
1111 {
12- foreach ( var transformer in Transformers )
13- {
14- var result = transformer ( propertyType , value ) ;
15- if ( result != null ) return result ;
16- }
12+ if ( Transformers . ContainsKey ( propertyType ) )
13+ return Transformers [ propertyType ] ( propertyType , value ) ;
1714 return ( value as object ?? "" ) . ToString ( ) ;
1815 }
19- private static readonly List < StringTransformer > Transformers = new List < StringTransformer > ( )
16+
17+ static StringTransformers ( )
2018 {
21- Guard < DateTimeOffset > ( dateTimeOffset => dateTimeOffset . ToLocalTime ( ) . ToString ( "g" ) ) ,
22- Guard < DateTime > ( dateTime => dateTime . ToLocalTime ( ) . ToString ( "g" ) ) ,
23- Guard < IHtmlString > ( s => s . ToHtmlString ( ) ) ,
24- Guard < IEnumerable < string > > ( s => s . ToArray ( ) ) ,
25- Guard < IEnumerable < int > > ( s => s . ToArray ( ) ) ,
26- Guard < IEnumerable < long > > ( s => s . ToArray ( ) ) ,
27- Guard < IEnumerable < decimal > > ( s => s . ToArray ( ) ) ,
28- Guard < IEnumerable < bool > > ( s => s . ToArray ( ) ) ,
29- Guard < IEnumerable < double > > ( s => s . ToArray ( ) ) ,
30- Guard < IEnumerable < object > > ( s => s . Select ( o => GetStringedValue ( o . GetType ( ) , o ) ) . ToArray ( ) ) ,
31- Guard < bool > ( s => s ) ,
32- Guard < object > ( o => ( o ?? "" ) . ToString ( ) )
33- } ;
19+ RegisterFilter < DateTimeOffset > ( dateTimeOffset => dateTimeOffset . ToLocalTime ( ) . ToString ( "g" ) ) ;
20+ RegisterFilter < DateTime > ( dateTime => dateTime . ToString ( "g" ) ) ;
21+ RegisterFilter < IHtmlString > ( s => s . ToHtmlString ( ) ) ;
22+ RegisterFilter < IEnumerable < string > > ( s => s . ToArray ( ) ) ;
23+ RegisterFilter < IEnumerable < int > > ( s => s . ToArray ( ) ) ;
24+ RegisterFilter < IEnumerable < long > > ( s => s . ToArray ( ) ) ;
25+ RegisterFilter < IEnumerable < decimal > > ( s => s . ToArray ( ) ) ;
26+ RegisterFilter < IEnumerable < bool > > ( s => s . ToArray ( ) ) ;
27+ RegisterFilter < IEnumerable < double > > ( s => s . ToArray ( ) ) ;
28+ RegisterFilter < IEnumerable < object > > ( s => s . Select ( o => GetStringedValue ( o . GetType ( ) , o ) ) . ToArray ( ) ) ;
29+ RegisterFilter < bool > ( s => s ) ;
30+ RegisterFilter < object > ( o => ( o ?? "" ) . ToString ( ) ) ;
31+ }
3432
35- public delegate object GuardedValueTransformer < TVal > ( TVal value ) ;
33+ private static readonly Dictionary < Type , StringTransformer > Transformers = new Dictionary < Type , StringTransformer > ( ) ;
3634
35+ public delegate object GuardedValueTransformer < TVal > ( TVal value ) ;
3736
3837 public delegate object StringTransformer ( Type type , object value ) ;
3938
4039 public static void RegisterFilter < TVal > ( GuardedValueTransformer < TVal > filter )
4140 {
42- Transformers . Add ( Guard < TVal > ( filter ) ) ;
41+ if ( Transformers . ContainsKey ( typeof ( TVal ) ) )
42+ Transformers [ typeof ( TVal ) ] = Guard ( filter ) ;
43+ else
44+ Transformers . Add ( typeof ( TVal ) , Guard ( filter ) ) ;
4345 }
4446
4547 private static StringTransformer Guard < TVal > ( GuardedValueTransformer < TVal > transformer )
@@ -64,4 +66,4 @@ public static Dictionary<string, object> TransformDictionary(Dictionary<string,
6466 return output ;
6567 }
6668 }
67- }
69+ }
0 commit comments