gpt4 book ai didi

c# - 有没有办法在 switch 语句中输入所有情况?

转载 作者:行者123 更新时间:2023-11-30 14:05:44 25 4
gpt4 key购买 nike

我正在使用一个 switch 语句,它根据一个案例设置对象的某些属性 - 一个新的要求是添加一个案例语句“全部”以基本上执行所有案例以应用所有字段 - 使用在特殊情况下。

我真的找不到很好的解决方案,每个 case 语句只设置 1-2 个属性值,因此不值得将逻辑分离到方法中。但是,我也不希望有大量重复代码。

var person = new Person();
switch (PersonEnum)
{
case PersonEnum.Name:
person.Name = ...
break;
case PersonEnum.Age:
person.Age = ...
break;
case PersonEnum.All:
person.Name = ...
person.Age = ...
break;

上面的示例代码是我正在处理的内容的简化版本,但这个想法仍然适用。

最佳答案

使用 Flags 枚举会更实用。在这种情况下,您可以这样做:

if (PersonEnum.HasFlag(PersonEnum.Name)) // Name is set. HasFlag is equivalent to (PersonEnum & PersonEnum.Name) != 0
{
person.Name = ...
}

if (PersonEnum.HasFlag(PersonEnum.Age)) // Age is set
{
person.Age = ...
}
...

在这种情况下,您甚至不需要检查 PersonEnum.All

你的枚举应该是这样的:

[Flags]
enum PersonEnum
{
Name = 1,
Age = 2,
LastName = 4,
...
NameAndAge = Name | Age,
All = Name | Age | LastName ...
}

关于c# - 有没有办法在 switch 语句中输入所有情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54470768/

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