joh*_*nie 50 c# switch-statement
我的代码如下:
public static void Output<T>(IEnumerable<T> dataSource) where T : class
{
dataSourceName = (typeof(T).Name);
switch (dataSourceName)
{
case (string)typeof(CustomerDetails).Name.ToString(); :
var t = 123;
break;
default:
Console.WriteLine("Test");
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.case语句给出了一个错误,说明了一个常量变量.请大家帮忙谢谢!
dee*_*ee1 31
基本上,开关不能在case语句中包含evaluate语句.必须对它们进行静态评估.
Max*_*erl 27
您只能匹配switch语句中的常量.
例:
switch (variable1)
{
case 1: // A hard-coded value
// Code
break;
default:
// Code
break;
}
Run Code Online (Sandbox Code Playgroud)
有效,但是
switch (variable1)
{
case variable2:
// Code
break;
default:
// Code
break;
}
Run Code Online (Sandbox Code Playgroud)
不
0xF*_*0xF 17
现在您可以使用nameof
:
public static void Output<T>(IEnumerable<T> dataSource) where T : class
{
string dataSourceName = typeof(T).Name;
switch (dataSourceName)
{
case nameof(CustomerDetails):
var t = 123;
break;
default:
Console.WriteLine("Test");
}
}
Run Code Online (Sandbox Code Playgroud)
nameof(CustomerDetails)
基本上与字符串文字相同"CustomerDetails"
,但在编译时检查它是否引用了某个符号(以防止输入错误)。
nameof
出现在 C# 6.0 中,所以在问这个问题之后。
MjH*_*MjH 10
有一个与我分享的技巧(不要询问细节 - 无法提供它们,但它对我有用):
switch (variable_1)
{
case var value when value == variable_2: // that's the trick
DoSomething();
break;
default:
DoSomethingElse();
break;
}
Run Code Online (Sandbox Code Playgroud)
您不能对此使用switch语句,因为案例值无法计算表达式.为此你必须使用一个if/else ...
public static void Output<T>(IEnumerable<T> dataSource) where T : class
{
dataSourceName = (typeof(T).Name);
if(string.Compare(dataSourceName, typeof(CustomerDetails).Name.ToString(), true)==0)
{
var t = 123;
}
else if (/*case 2 conditional*/)
{
//blah
}
else
{
//default case
Console.WriteLine("Test");
}
}
Run Code Online (Sandbox Code Playgroud)
我也冒昧地整理你的条件陈述.调用后无需强制转换为字符串ToString()
.无论如何,这总是会返回一个字符串.在比较字符串是否相等时,请记住使用==运算符将导致区分大小写的比较.最好使用string compare = 0和最后一个参数来设置区分大小写的开/关.
至少当我尝试使用 Visual Studio 2017 时,这似乎对我有用。
public static class Words
{
public const string temp = "What";
public const string temp2 = "the";
}
var i = "the";
switch (i)
{
case Words.temp:
break;
case Words.temp2:
break;
}
Run Code Online (Sandbox Code Playgroud)