gpt4 book ai didi

.net-core-3.0 - 模式匹配增强 : Switch Pattern

转载 作者:行者123 更新时间:2023-12-04 14:16:31 25 4
gpt4 key购买 nike

刚刚看了看"new"C# 8.0 Features

于是我尝试重写了下面的代码

    private static void RunExample(ExampleCode exampleCode)
{
switch(exampleCode)
{
case ExampleCode.DefaultInterfaceMethod:
RunDefaultInterfaceMethodExample();
break;
case ExampleCode.PatternMatchingEnhancements:
RunPatternMatchingEnhancementsExample();
break;
}
}

为此:

    private static void RunExample(ExampleCode exampleCode)
{
exampleCode switch
{
ExampleCode.DefaultInterfaceMethod => RunDefaultInterfaceMethodExample(),
ExampleCode.PatternMatchingEnhancements => RunPatternMatchingEnhancementsExample()
};
}

但是,我收到以下编译错误:

Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement.

Compile Error

如何用新语法重写它?

最佳答案

正如评论中所指出的,新的基于开关的模式匹配期望返回结果。

F# 中,因为一切都是表达式,所以 void 类型实际上是表达式的有效返回类型,这会起作用。

如果像你这样,我认为最好使用旧代码,但如果你真的想使用新语法,你可以这样做:

Action methodToExecute = exampleCode switch
{
ExampleCode.DefaultInterfaceMethod => RunDefaultInterfaceMethodExample,
ExampleCode.PatternMatchingEnhancements => RunPatternMatchingEnhancementsExample,
_ => throw new NotImplementedException()
};
methodToExecute();

(这仅在您为每种情况执行的方法具有相同定义时才有效)

使用穷举模式是一种很好的做法,这就是为什么我使用带下划线的最后一种情况。在 C# 中,枚举值被编译为整数,即使您的开关处理了所有枚举标签,编译器仍然不知道您已经处理了所有情况,并且当您向枚举添加新标签时,您不会收到有关未处理情况的适当警告.

无论何时使用枚举,最好使用默认情况,这样所有未处理的情况都会落入。

关于.net-core-3.0 - 模式匹配增强 : Switch Pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59613482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com