我需要在开关盒中包含数组位置,例如位置[0],位置[1]等。
我是编程的新手,我从C#开始,所以我尝试为此switch语句创建一个非常简单的数组,但是我尝试过的所有方法都没有起作用。这是我到目前为止的内容:
string[] wordme = { "me", "myself", "i" };
switch (wordme)
{
case wordme[0]:
Me("me"); //refers to method
continue;
case wordme[1]:
Myself("myself"); //refers to method
continue;
case wordme[2]:
I("i");//refers to method
continue;
default:
continue;
}
我希望它引用这些方法,但由于3条错误消息(均引用“ case”行)而无法运行,因此显示为“无法将类型'string'隐式转换为'string []'”
答案 0 :(得分:2)
我不确定您要做什么,或者为什么需要这样做。但是,您可以使用when contextual keyword
从C#7.0开始,案例标签不再需要相互 排他性,以及标签在开关中出现的顺序 语句可以确定执行哪个切换块。 when关键字 可用于指定导致其关联的过滤条件 仅当过滤条件也为真时,case标签才为真
string[] wordme = { "me", "myself", "i" };
for (int i = 0; i < wordme.Length; i++)
{
switch (wordme[i])
{
case "me" when i == 0:
Me("me"); //refers to method
break;
case "myself" when i == 1:
Myself("myself"); //refers to method
break;
case "i" when i == 2:
I("i"); //refers to method
break;
default:
break;
}
}
或者另一个猜测
string[] wordme = { "me", "myself", "i" };
var mapping = new Dictionary<(string key, int ID), Action<string>> {
{("me", 0), s => Me(s)},
{("myself", 1), s => Myself(s)},
{("i", 2), s => I(s) }};
for (var i = 0; i < wordme.Length; i++)
if (mapping.TryGetValue((wordme[i], i), out var action))
action(wordme[i]);
答案 1 :(得分:0)
请以这种方式检查! foreach(wordme中的可变项)Console.WriteLine(item);