@@ -22,7 +22,7 @@ public class EnumParseTests
2222 static readonly string [ ] ValidValues = new string [ ] { Greek . Alpha . ToString ( ) , Greek . Epsilon . ToString ( ) , Greek . Phi . ToString ( ) } ;
2323 static readonly string [ ] InvalidValues = new string [ ] { "Apple" , "Orange" , "Pineapple" } ;
2424
25- [ Benchmark ( Baseline = true ) ]
25+ // [Benchmark(Baseline = true)]
2626 public Greek EnumParse ( )
2727 {
2828 Greek e = Greek . None ;
@@ -46,7 +46,128 @@ public Greek EnumParse()
4646 return e ;
4747 }
4848
49+ private static bool TryParseBySwitch ( string value , bool ignoreCase , out Greek e )
50+ {
51+ if ( ignoreCase )
52+ {
53+ if ( value . Equals ( nameof ( Greek . Alpha ) , StringComparison . OrdinalIgnoreCase ) )
54+ {
55+ e = Greek . Alpha ;
56+ return true ;
57+ }
58+
59+ if ( value . Equals ( nameof ( Greek . Beta ) , StringComparison . OrdinalIgnoreCase ) )
60+ {
61+ e = Greek . Beta ;
62+ return true ;
63+ }
64+
65+ if ( value . Equals ( nameof ( Greek . Cappa ) , StringComparison . OrdinalIgnoreCase ) )
66+ {
67+ e = Greek . Cappa ;
68+ return true ;
69+ }
70+
71+ if ( value . Equals ( nameof ( Greek . Delta ) , StringComparison . OrdinalIgnoreCase ) )
72+ {
73+ e = Greek . Delta ;
74+ return true ;
75+ }
76+
77+ if ( value . Equals ( nameof ( Greek . Epsilon ) , StringComparison . OrdinalIgnoreCase ) )
78+ {
79+ e = Greek . Epsilon ;
80+ return true ;
81+ }
82+
83+ if ( value . Equals ( nameof ( Greek . Gamma ) , StringComparison . OrdinalIgnoreCase ) )
84+ {
85+ e = Greek . Gamma ;
86+ return true ;
87+ }
88+
89+ if ( value . Equals ( nameof ( Greek . Omega ) , StringComparison . OrdinalIgnoreCase ) )
90+ {
91+ e = Greek . Omega ;
92+ return true ;
93+ }
94+
95+ if ( value . Equals ( nameof ( Greek . Theta ) , StringComparison . OrdinalIgnoreCase ) )
96+ {
97+ e = Greek . Theta ;
98+ return true ;
99+ }
100+
101+ if ( value . Equals ( nameof ( Greek . None ) , StringComparison . OrdinalIgnoreCase ) )
102+ {
103+ e = Greek . None ;
104+ return true ;
105+ }
106+
107+ e = default ! ;
108+ return false ;
109+ }
110+
111+ switch ( value )
112+ {
113+ case nameof ( Greek . Alpha ) :
114+ e = Greek . Alpha ;
115+ return true ;
116+ case nameof ( Greek . Beta ) :
117+ e = Greek . Beta ;
118+ return true ;
119+ case nameof ( Greek . Cappa ) :
120+ e = Greek . Cappa ;
121+ return true ;
122+ case nameof ( Greek . Delta ) :
123+ e = Greek . Delta ;
124+ return true ;
125+ case nameof ( Greek . Epsilon ) :
126+ e = Greek . Epsilon ;
127+ return true ;
128+ case nameof ( Greek . Gamma ) :
129+ e = Greek . Gamma ;
130+ return true ;
131+ case nameof ( Greek . Omega ) :
132+ e = Greek . Omega ;
133+ return true ;
134+ case nameof ( Greek . Theta ) :
135+ e = Greek . Theta ;
136+ return true ;
137+ case nameof ( Greek . None ) :
138+ e = Greek . None ;
139+ return true ;
140+ default :
141+ e = default ! ;
142+ return false ;
143+ }
144+ }
145+
49146 [ Benchmark ]
147+ public Greek Switch ( )
148+ {
149+ Greek e = Greek . None ;
150+ if ( UseValid )
151+ {
152+ foreach ( string s in ValidValues )
153+ {
154+ if ( ! TryParseBySwitch ( s , IgnoreCase , out e ) )
155+ throw new Exception ( "Invalid." ) ;
156+ }
157+ }
158+ else
159+ {
160+ foreach ( string s in InvalidValues )
161+ {
162+ if ( TryParseBySwitch ( s , IgnoreCase , out e ) )
163+ throw new Exception ( "Valid." ) ;
164+ }
165+
166+ }
167+ return e ;
168+ }
169+
170+ //[Benchmark]
50171 public Greek EnumValueParse ( )
51172 {
52173 Greek e = Greek . None ;
@@ -71,7 +192,7 @@ public Greek EnumValueParse()
71192 }
72193
73194
74- [ Benchmark ]
195+ // [Benchmark]
75196 public Greek FastEnumParse ( )
76197 {
77198 Greek e = Greek . None ;
0 commit comments