pme*_*ino 30 c# if-statement switch-statement
我正在使用C#应用程序
if ((message.Contains("test")))
{
Console.WriteLine("yes");
} else if ((message.Contains("test2"))) {
Console.WriteLine("yes for test2");
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以改变switch()这些if()陈述吗?
Teo*_*gul 35
不,switch语句需要编译时常量.该语句message.Contains("test")可以根据消息评估true或false,因此它不是常量,因此不能用作switch语句的"case".
Lak*_*mon 30
纠正[先生]的最终语法 C]的答案.
随着VS2017RC及其C#7支持的发布,它以这种方式工作:
switch(message)
{
case string a when a.Contains("test2"): return "no";
case string b when b.Contains("test"): return "yes";
}
Run Code Online (Sandbox Code Playgroud)
您应该选择案例订购,因为第一场比赛将被选中.这就是为什么在测试之前放置"test2"的原因.
Tig*_*ran 29
如果你只是想使用switch/case,你可以做这样的事情,伪代码:
string message = "test of mine";
string[] keys = new string[] {"test2", "test" };
string sKeyResult = keys.FirstOrDefault<string>(s=>message.Contains(s));
switch (sKeyResult)
{
case "test":
Console.WriteLine("yes for test");
break;
case "test2":
Console.WriteLine("yes for test2");
break;
}
Run Code Online (Sandbox Code Playgroud)
但是如果键的数量很大,你可以用字典替换它,如下所示:
static Dictionary<string, string> dict = new Dictionary<string, string>();
static void Main(string[] args)
{
string message = "test of mine";
// this happens only once, during initialization, this is just sample code
dict.Add("test", "yes");
dict.Add("test2", "yes2");
string sKeyResult = dict.Keys.FirstOrDefault<string>(s=>message.Contains(s));
Console.WriteLine(dict[sKeyResult]); //or `TryGetValue`...
}
Run Code Online (Sandbox Code Playgroud)
she*_*bin 12
您可以先进行检查,然后根据需要使用开关.
例如:
string str = "parameter"; // test1..test2..test3....
if (!message.Contains(str)) return ;
Run Code Online (Sandbox Code Playgroud)
然后
switch(str)
{
case "test1" : {} break;
case "test2" : {} break;
default : {} break;
}
Run Code Online (Sandbox Code Playgroud)
小智 11
这将使用开关表达式在 C# 8 中工作
var message = "Some test message";
message = message switch
{
string a when a.Contains("test") => "yes",
string b when b.Contains("test2") => "yes for test2",
_ => "nothing to say"
};
Run Code Online (Sandbox Code Playgroud)
如需进一步参考 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/switch-expression
Naw*_*win 10
使用 C# 简单而高效
string sri = "Naveen";
switch (sri)
{
case var s when sri.Contains("ee"):
Console.WriteLine("oops! worked...");
break;
case var s when sri.Contains("same"):
Console.WriteLine("oops! Not found...");
break;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
string message = "This is test1";
string[] switchStrings = { "TEST1", "TEST2" };
switch (switchStrings.FirstOrDefault<string>(s => message.ToUpper().Contains(s)))
{
case "TEST1":
//Do work
break;
case "TEST2":
//Do work
break;
default:
//Do work
break;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89924 次 |
| 最近记录: |