Skip to content

Commit 586ec7a

Browse files
Refactor
1 parent fd27e51 commit 586ec7a

File tree

1 file changed

+36
-36
lines changed

1 file changed

+36
-36
lines changed

CodeConverter/CSharp/LiteralConversions.cs

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)