介绍
在C# 8.0中,我们可以使用新的Switch表达式来简化代码的编写。 使用Switch表达式可以更清晰地表达目的,同时还可以减少代码量。
Switch表达式
在C# 8.0中,可以使用新的Switch表达式来方便地编写能够使用条件语句精简编写的代码。新的Switch表达式代码如下所示:
public static T Switch(this object value, params (object input, T output)[] cases)
{
foreach (var (input, output) in cases)
if (value == null ? input == null : value.Equals(input))
return output;
return default;
}
这个示例展示了如何使用新的Switch表达式来编写代码,并且可以读取一组输入并返回一个输出。
Case类型
在Switch语句中使用的Case类型,可以是表达式中的常量,以及部分声明类型或是枚举类型。
下面的代码示例展示了如何使用Switch表达式来检查枚举类型:
int number = 5;
string output = number switch
{
1 => "One",
2 => "Two",
3 => "Three",
4 => "Four",
5 => "Five",
_ => "Default",
};
Default语句
在Switch语句中使用的Default语句,可以在没有匹配到特定的Case时提供默认的返回值。
下面的代码示例展示了如何使用Switch表达式来实现完整的Default功能:
int number = 10;
string output = number switch
{
1 => "One",
2 => "Two",
3 => "Three",
4 => "Four",
5 => "Five",
_ => "Default",
};
Switch分支
Switch分支是在Switch语句中使用的某个值的代码段。这些分支可以是表达式中的常量,部分声明类型或是枚举类型。
下面的代码示例展示了如何使用Switch分支来检查枚举类型:
public enum PetKinds {Hamster, Dog, Cat, Bird, Fish}
public static string Greet(PetKinds pet)
{
return pet switch
{
PetKinds.Hamster => "Squeak",
PetKinds.Dog => "Woof",
PetKinds.Cat => "Meow",
PetKinds.Bird => "Squawk",
PetKinds.Fish => "Bubble",
_ => throw new ArgumentException("invalid pet", nameof(pet))
};
}
使用Switch表达式重构代码
下面的代码示例展示了如何使用Switch表达式来重构代码。
public bool IsNullOrEmpty(string inputString)
{
if (inputString == null)
{
return true;
}
if (inputString == "")
{
return true;
}
return false;
}
这段代码可以用更短的代码重写,使用Switch表达式:
public bool IsNullOrEmpty(string inputString)
{
return inputString switch
{
null => true,
"" => true,
_ => false
};
}
结论
使用新的Switch表达式可以更清晰地表达目的,同时还可以减少代码量。 在C# 8.0中使用Switch表达式来替换现有的代码,可以使代码更加容易阅读和理解。 我们可以用更简洁的代码来编写作用于多个不断变化的值的代码。
参考文献
Switch 表达式: https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/switch-expression