@@ -30,43 +30,43 @@ public static ExpressionSyntax GetLiteralExpression(object value, string textFor
3030
3131 textForUser = ConvertNumericLiteralValueText ( textForUser ?? value . ToString ( ) , value , convertedType ) ;
3232
33- if ( value is byte )
34- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( byte ) value ) ) ;
35- if ( value is sbyte )
36- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( sbyte ) value ) ) ;
37- if ( value is short )
38- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( short ) value ) ) ;
39- if ( value is ushort )
40- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( ushort ) value ) ) ;
41- if ( value is int )
42- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( int ) value ) ) ;
43- if ( value is uint )
44- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( uint ) value ) ) ;
45- if ( value is long )
46- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( long ) value ) ) ;
47- if ( value is ulong )
48- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( ulong ) value ) ) ;
49-
50- if ( value is float )
51- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( float ) value ) ) ;
52- if ( value is double ) {
53- // Important to use value text, otherwise "10.0" gets coerced to and integer literal of 10 which can change semantics
54- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( double ) value ) ) ;
55- }
56- if ( value is decimal ) {
57- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ( decimal ) value ) ) ;
58- }
59-
60- if ( value is char )
61- return SyntaxFactory . LiteralExpression ( CSSyntaxKind . CharacterLiteralExpression , SyntaxFactory . Literal ( ( char ) value ) ) ;
62-
63- if ( value is DateTime dt ) {
64- var valueToOutput = dt . Date . Equals ( dt ) ? dt . ToString ( "yyyy-MM-dd" ) : dt . ToString ( "yyyy-MM-dd HH:mm:ss" ) ;
65- return SyntaxFactory . ParseExpression ( "DateTime.Parse(\" " + valueToOutput + "\" )" ) ;
33+ switch ( value )
34+ {
35+ case byte b :
36+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , b ) ) ;
37+ case sbyte sb :
38+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , sb ) ) ;
39+ case short s :
40+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , s ) ) ;
41+ case ushort us :
42+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , us ) ) ;
43+ case int i :
44+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , i ) ) ;
45+ case uint u :
46+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , u ) ) ;
47+ case long l :
48+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , l ) ) ;
49+ case ulong ul :
50+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , ul ) ) ;
51+ case double d :
52+ // The value is passed as a double from VB expression: "3.5F"
53+ // Important to use value text, otherwise "10.0" gets coerced to and integer literal of 10 which can change semantics
54+ var syntaxToken = false ? SyntaxFactory . Literal ( textForUser , ( float ) d ) : SyntaxFactory . Literal ( textForUser , d ) ;
55+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , syntaxToken ) ;
56+ case float f :
57+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , f ) ) ;
58+ case decimal dec :
59+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . NumericLiteralExpression , SyntaxFactory . Literal ( textForUser , dec ) ) ;
60+ case char c :
61+ return SyntaxFactory . LiteralExpression ( CSSyntaxKind . CharacterLiteralExpression , SyntaxFactory . Literal ( c ) ) ;
62+ case DateTime dt :
63+ {
64+ var valueToOutput = dt . Date . Equals ( dt ) ? dt . ToString ( "yyyy-MM-dd" ) : dt . ToString ( "yyyy-MM-dd HH:mm:ss" ) ;
65+ return SyntaxFactory . ParseExpression ( "DateTime.Parse(\" " + valueToOutput + "\" )" ) ;
66+ }
67+ default :
68+ throw new ArgumentOutOfRangeException ( nameof ( value ) , value , null ) ;
6669 }
67-
68-
69- throw new ArgumentOutOfRangeException ( nameof ( value ) , value , null ) ;
7070 }
7171
7272 internal static string GetQuotedStringTextForUser ( string textForUser , string valueTextForCompiler )
0 commit comments