@@ -128,20 +128,9 @@ public static string AsBracketNotation(string[] indicies)
128128 return sb . ToString ( ) ;
129129 }
130130
131- static int ParseInt ( string str , int defaultValue = 0 )
132- {
133- if ( string . IsNullOrEmpty ( str ) )
134- return defaultValue ;
135-
136- try
137- {
138- return int . Parse ( str , NumberStyles . None , CultureInfo . InvariantCulture ) ;
139- }
140- catch ( FormatException )
141- {
142- return defaultValue ;
143- }
144- }
131+ static int ? TryParseInt ( string str ) =>
132+ int . TryParse ( str , NumberStyles . None , CultureInfo . InvariantCulture , out var n )
133+ ? n : ( int ? ) null ;
145134
146135 sealed class Interpreter
147136 {
@@ -286,9 +275,9 @@ static IEnumerable<TraceArgs> Slice(string loc, string expr, object value, strin
286275
287276 var length = list . Count ;
288277 var parts = loc . Split ( Colon ) ;
289- var start = ParseInt ( parts [ 0 ] ) ;
290- var end = ParseInt ( parts [ 1 ] , list . Count ) ;
291- var step = parts . Length > 2 ? ParseInt ( parts [ 2 ] , 1 ) : 1 ;
278+ var start = TryParseInt ( parts [ 0 ] ) ?? 0 ;
279+ var end = TryParseInt ( parts [ 1 ] ) ?? list . Count ;
280+ var step = parts . Length > 2 ? TryParseInt ( parts [ 2 ] ) ?? 1 : 1 ;
292281 start = ( start < 0 ) ? Math . Max ( 0 , start + length ) : Math . Min ( length , start ) ;
293282 end = ( end < 0 ) ? Math . Max ( 0 , end + length ) : Math . Min ( length , end ) ;
294283 for ( var i = start ; i < end ; i += step )
@@ -329,10 +318,8 @@ public bool HasMember(object value, string member)
329318
330319 var list = value as IList ;
331320 if ( list != null )
332- {
333- var index = ParseInt ( member , - 1 ) ;
334- return index >= 0 && index < list . Count ;
335- }
321+ return TryParseInt ( member ) is int index
322+ && index >= 0 && index < list . Count ;
336323
337324 return false ;
338325 }
@@ -347,8 +334,7 @@ public object GetMemberValue(object value, string member)
347334 return dict [ member ] ;
348335
349336 var list = ( IList ) value ;
350- var index = ParseInt ( member , - 1 ) ;
351- if ( index >= 0 && index < list . Count )
337+ if ( TryParseInt ( member ) is int index && index >= 0 && index < list . Count )
352338 return list [ index ] ;
353339
354340 return null ;
0 commit comments