11using System ;
2+ using System . Diagnostics ;
23using System . Globalization ;
34
45namespace Rubberduck . Parsing . Preprocessing
@@ -28,29 +29,30 @@ public bool AsBool
2829 {
2930 return false ;
3031 }
31- var str = _value ;
32- if ( string . CompareOrdinal ( str . ToLower ( ) , "true" ) == 0
33- || string . CompareOrdinal ( str , "#TRUE#" ) == 0 )
32+ var value = _value ;
33+ if ( string . CompareOrdinal ( value . ToLower ( ) , "true" ) == 0 || string . CompareOrdinal ( value , "#TRUE#" ) == 0 )
3434 {
3535 return true ;
3636 }
37- else if ( string . CompareOrdinal ( str . ToLower ( ) , "false" ) == 0
38- || string . CompareOrdinal ( str , "#FALSE#" ) == 0 )
37+
38+ if ( string . CompareOrdinal ( value . ToLower ( ) , "false" ) == 0 || string . CompareOrdinal ( value , "#FALSE#" ) == 0 )
3939 {
4040 return false ;
4141 }
42- else
43- {
44- decimal number = AsDecimal ;
45- return new DecimalValue ( number ) . AsBool ;
46- }
42+
43+ return new DecimalValue ( AsDecimal ) . ToString ( ) != "0" ; // any non-zero value evaluates to TRUE in VBA
4744 }
4845 }
4946
5047 public byte AsByte
5148 {
5249 get
5350 {
51+ byte value ;
52+ if ( byte . TryParse ( _value , NumberStyles . Float , CultureInfo . InvariantCulture , out value ) )
53+ {
54+ return value ;
55+ }
5456 return byte . Parse ( _value , NumberStyles . Float ) ;
5557 }
5658 }
@@ -59,10 +61,10 @@ public DateTime AsDate
5961 {
6062 get
6163 {
62- DateTime date ;
63- if ( DateTime . TryParse ( _value , out date ) )
64+ DateTime value ;
65+ if ( DateTime . TryParse ( _value , out value ) )
6466 {
65- return date ;
67+ return value ;
6668 }
6769 decimal number = AsDecimal ;
6870 return new DecimalValue ( number ) . AsDate ;
@@ -73,7 +75,13 @@ public decimal AsDecimal
7375 {
7476 get
7577 {
76- return decimal . Parse ( _value , NumberStyles . Float ) ;
78+ decimal value ;
79+ if ( decimal . TryParse ( _value , NumberStyles . Float , CultureInfo . InvariantCulture , out value ) )
80+ {
81+ return value ;
82+ }
83+ Debug . Assert ( false ) ; // this line was never hit in any unit test covering it.
84+ return 0 ;
7785 }
7886 }
7987
@@ -87,7 +95,7 @@ public string AsString
8795
8896 public override string ToString ( )
8997 {
90- return _value . ToString ( ) ;
98+ return _value ;
9199 }
92100 }
93101}
0 commit comments