3 回答
TA贡献1802条经验 获得超5个赞
使用 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 ...
}
TA贡献1877条经验 获得超6个赞
您可以将其分成 if 语句,以稍微减少代码
if (PersonEnum == PersonEnum.All || PersonEnum == PersonEnum.Name)
person.Name = ...
if (PersonEnum == PersonEnum.All || PersonEnum == PersonEnum.Age)
person.Age = ...
TA贡献1995条经验 获得超2个赞
实际上有一种方法可以做到这一点,它不如Java支持的falls那么好,但是你可以实现类似的东西,是的,它就是这样。应该指出的是,尽管与goto语句相关的污名化,但也许这是一个可以接受的地方,最好是代码简短,简洁且易于阅读。goto
但是,对于此特定方案,它可能不是最佳选择。这里更好的选择是工厂模式。
switch (personEnum)
{
case PersonEnum.Name:
person.Name = "";
goto case PersonEnum.Age;
case PersonEnum.Age:
...
- 3 回答
- 0 关注
- 77 浏览
添加回答
举报