如何在 C# 8.0 中编写新的 Switch 表达式?

介绍

在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

后端开发标签