Files
codeql/csharp/ql/test/library-tests/controlflow/graph/Switch.cs
2025-04-25 10:32:48 +02:00

180 lines
3.2 KiB
C#

using System;
class Switch
{
void M1(object o)
{
switch (o) { }
}
void M2(object o)
{
switch (o)
{
case "a":
return;
case 0:
throw new Exception();
case null:
goto default;
case int i:
if (o == null)
return;
goto case 0;
case string s when s.Length > 0 && s != "a":
Console.WriteLine(s);
return;
case double d when Throw():
Label:
return;
default:
goto Label;
}
}
void M3()
{
switch (Throw())
{
default:
return;
}
}
void M4(object o)
{
switch (o)
{
case int _:
break;
case bool _ when o != null:
break;
}
}
void M5()
{
switch (1 + 2)
{
case 2:
break;
case 3:
break;
}
}
void M6(string s)
{
switch ((object)s)
{
case int _:
break;
case "":
break;
}
}
bool M7(int i, int j)
{
switch (i)
{
case 1:
return true;
case 2:
if (j > 2)
break;
return true;
}
return false;
}
bool M8(object o)
{
switch (o)
{
case int _:
return true;
}
return false;
}
int M9(string s)
{
switch (s?.Length)
{
case 0: return 0;
case 1: return 1;
}
return -1;
}
static bool Throw() => throw new Exception();
int M10(string s)
{
switch (s.Length)
{
case 3 when s == "foo": return 1;
case 2 when s == "fu": return 2;
}
return -1;
}
void M11(object o)
{
if (o switch { bool b => b, _ => false })
return;
}
string M12(object o)
{
return (o switch { string s => s, _ => null })?.ToString();
}
int M13(int i)
{
switch (i)
{
default: return -1;
case 1: return 1;
case 2: return 2;
}
}
int M14(int i)
{
switch (i)
{
case 1: return 1;
default: return -1;
case 2: return 2;
}
}
void M15(bool b)
{
var s = b switch { true => "a", false => "b" };
if (b)
System.Console.WriteLine($"a = {s}");
else
System.Console.WriteLine($"b = {s}");
}
void M16(int i)
{
switch (i)
{
case 1:
case 2:
System.Console.WriteLine("1 or 2");
break;
case 3:
System.Console.WriteLine("3");
break;
default:
System.Console.WriteLine("def");
break;
}
}
}