gpt4 book ai didi

c# - 为什么 C# 模式匹配对枚举并不详尽?

转载 作者:行者123 更新时间:2023-12-04 11:07:40 25 4
gpt4 key购买 nike

说,我有以下枚举和代码测试枚举:

enum Flag
{
On,
Off
}

string GetMessage(Flag flag) =>
flag switch
{
Flag.On => "State is ON",
Flag.Off => "State is OFF"
};
但是,我收到警告:

Warning CS8509 The switch expression does not handle all possible values of its input type (it is not exhaustive). For example, the pattern '(ConsoleApp.Flag)2' is not covered.


为什么当我列出所有枚举的值时它不是详尽无遗的?什么是 (ConsoleApp.Flg)2枚举值?

最佳答案

反例:

string Foo()
{
return GetMessage((Flag)42);
}
不幸的是,C# 枚举不如 Haskell 或其他具有更好 FP 功能的语言中的代数数据类型(或变体类型,无论您喜欢如何称呼它们)健壮。它实际上只是围绕整数值(默认为 int)的一些元数据,因此类型系统中没有任何内容阻止您传递与有效枚举值不对应的值。编译器告诉你,使用 (Flag)2作为可能的值。要解决这个问题,添加一个标准的包罗万象的:
string GetMessage(Flag flag) =>
flag switch
{
Flag.On => "State is ON",
Flag.Off => "State is OFF",
_ => throw new ArgumentOutOfRangeException(nameof(flag)),
};

关于c# - 为什么 C# 模式匹配对枚举并不详尽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63316128/

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