如何在 C# 中通过 List<string> 切换大小写
How to switch case over an List<string> in C#
我想在 C# 中对 List<string>
执行 switch case
。
假设我有以下列表:
var myList = new List<string>(new string[] { "Apple", "Pear" });
现在我想检查是 Apple 还是 Pear 然后做点什么。在 if statement
中,它看起来像这样:
if (myList.Contains("Apple"))
//do something
else if (myList.Contains("Pear"))
//so some other thing
else
//throw error
现在我怎样才能像 switch statement
一样以干净的方式做到这一点?
你可以这样做:
foreach (var fruit in myList)
{
switch (fruit)
{
case "Apple":
// do something
break; // or consider return based on your requirements
case "Pear":
// do something
break;
}
}
无法将此类代码放入 switch
语句中,因为它不是为检查某些 List 是否具有元素而设计的。它旨在切换 一个变量的不同值。
我不认为,你想要的行为可以用一个开关来干净地建模。但是为了让它尽可能易于管理和易于 add/change,像这样的东西怎么样:
var handlers = new[]
{
new Tuple<string, Action>("Apple", () => { /* Apple-thing */ }),
new Tuple<string, Action>("Pear", () => { /* Pear-thing */ }),
// add as many handlers as needed in proper sequence
};
var handled = false;
foreach (var handler in handlers)
{
if (myList.Contains(handler.Item1))
{
handler.Item2();
handled = true;
break;
}
}
if (!handled)
{
// throw error
}
对myList做一个循环,然后切换局部变量。
List<string> myList = new List<string>()
{ "Apple", "Pear"};
myList.ForEach(x =>
{
switch (x)
{
case "Apple":
{
//do something
break;
}
case "Pear":
{
// do something
break;
}
default:
break;
}
});
如果这是某种代码高尔夫挑战,其中不能使用命令 "if" 或 "else",而必须使用 "switch",则可能会迎接挑战这种方式:
string reallyWantToUseASwitchStatement = null;
reallyWantToUseASwitchStatement = reallyWantToUseASwitchStatement ??
(list.Contains("Apple") ? "Apple" : null);
reallyWantToUseASwitchStatement = reallyWantToUseASwitchStatement ??
(list.Contains("Pear") ? "Pear" : null);
switch (reallyWantToUseASwitchStatement)
{
case "Apple":
break;
case "Pear":
break;
}
偶然发现了这个,并没有真正看到有人回答他。
可以将其作为 switch 语句来执行,是否 "looks" 更好地由用户决定。
var myList = new List<string> { "Apple", "Pear" };
switch (myList)
{
case var _ when myList.Contains("Apple"):
// do apple stuff
break;
case var _ when myList.Contains("Pear"):
// do pear stuff
break;
default:
throw new System.ArgumentException("Some error message", nameof(myList));
}
我想在 C# 中对 List<string>
执行 switch case
。
假设我有以下列表:
var myList = new List<string>(new string[] { "Apple", "Pear" });
现在我想检查是 Apple 还是 Pear 然后做点什么。在 if statement
中,它看起来像这样:
if (myList.Contains("Apple"))
//do something
else if (myList.Contains("Pear"))
//so some other thing
else
//throw error
现在我怎样才能像 switch statement
一样以干净的方式做到这一点?
你可以这样做:
foreach (var fruit in myList)
{
switch (fruit)
{
case "Apple":
// do something
break; // or consider return based on your requirements
case "Pear":
// do something
break;
}
}
无法将此类代码放入 switch
语句中,因为它不是为检查某些 List 是否具有元素而设计的。它旨在切换 一个变量的不同值。
我不认为,你想要的行为可以用一个开关来干净地建模。但是为了让它尽可能易于管理和易于 add/change,像这样的东西怎么样:
var handlers = new[]
{
new Tuple<string, Action>("Apple", () => { /* Apple-thing */ }),
new Tuple<string, Action>("Pear", () => { /* Pear-thing */ }),
// add as many handlers as needed in proper sequence
};
var handled = false;
foreach (var handler in handlers)
{
if (myList.Contains(handler.Item1))
{
handler.Item2();
handled = true;
break;
}
}
if (!handled)
{
// throw error
}
对myList做一个循环,然后切换局部变量。
List<string> myList = new List<string>()
{ "Apple", "Pear"};
myList.ForEach(x =>
{
switch (x)
{
case "Apple":
{
//do something
break;
}
case "Pear":
{
// do something
break;
}
default:
break;
}
});
如果这是某种代码高尔夫挑战,其中不能使用命令 "if" 或 "else",而必须使用 "switch",则可能会迎接挑战这种方式:
string reallyWantToUseASwitchStatement = null;
reallyWantToUseASwitchStatement = reallyWantToUseASwitchStatement ??
(list.Contains("Apple") ? "Apple" : null);
reallyWantToUseASwitchStatement = reallyWantToUseASwitchStatement ??
(list.Contains("Pear") ? "Pear" : null);
switch (reallyWantToUseASwitchStatement)
{
case "Apple":
break;
case "Pear":
break;
}
偶然发现了这个,并没有真正看到有人回答他。 可以将其作为 switch 语句来执行,是否 "looks" 更好地由用户决定。
var myList = new List<string> { "Apple", "Pear" };
switch (myList)
{
case var _ when myList.Contains("Apple"):
// do apple stuff
break;
case var _ when myList.Contains("Pear"):
// do pear stuff
break;
default:
throw new System.ArgumentException("Some error message", nameof(myList));
}