对于是和否值的枚举来说,什么是好名字

nam*_*los 7 c# naming coding-style naming-conventions

背景

在我正在编写的C#命令行应用程序中,有几个参数的"是"和"否"是可能的值.

我使用下面显示的Enum类型存储他们的输入.

enum YesNo
{
     Yes,
     No
}
Run Code Online (Sandbox Code Playgroud)

哪个好 - 代码有效.没问题.

注意:是的,我可以将它们存储为bool(这是它以前的工作方式).我的设计选择是明确用户做出的是/否选择,因为他们会在其他情况下看到这个选项,我希望它更明显的选择是什么.

我的问题

  • 有一个名为"YesNo"的枚举似乎很奇怪 - 对于"是"和"否"值的枚举更好的名称有什么建议.

最后

我在StackOverflow的生命中相对较早地问过这个问题.这不是假问题 - 我确实遇到过这种情况.我只是觉得用它看看社区会做什么会很好.因为它,我承认一个有点奇怪的问题.

首先,感谢所有花时间回复的人.我试图用一个深思熟虑的结论来回报这个问题.

评论答案

切换到布尔.我理解你的动机,但我觉得我需要指出一个二元选择(并且我的意思是任意两个值之间的选择 - 活着/死亡,已婚/未婚等)与布尔选择之间的选择不同真假.我们发现程序员在yes/no和true/false之间切换容易 - 足够公平.如果我在这种情况下的选择是例如"民主党人"或"复制""(我知道的人为例子)那么你可以看到混淆或至少尴尬的可能性.我认为bool选项在这种情况下是有效的,但是更少所以在其他二元选择中.

本地化 - 伟大的观点.在我的具体情况下,它并不重要 - 这不是也不会被本地化,但对于其他情况,这是需要考虑的事情.

三个以上的选项 - 事实上,后来我不得不添加第三个值来表示用户的有效(在我的应用程序中)条件,特别是没有做出选择.

有很多好评,谢谢大家!

Jon*_*eet 37

你说你不想使用bool,因为它会被打印出来供用户查看其他内容.这表明问题不是存储而是显示.无论如何都要将是/否存在真/假,但是没有必要为它创建一个全新的类型IMO.

编辑:除了建议你不要摆在首位使用一个枚举,我强烈建议,如果你使用一个枚举,你改变了顺序或使用显式值.如果您最终将值视为整数,则Yes = 0,No = 1将会非常混乱.

  • 如果你限制你的存储机制永远可以直接呈现给用户,我怀疑你会把自己绑在其他地方.我真的会在适当的时候翻译它.作为奖励,它对i18n来说更容易...... (2认同)

Nik*_*lja 9

我建议你使用一个名称来表示设置为是或否的值.

例如


public enum Married
{
    YES,
    NO
}
Run Code Online (Sandbox Code Playgroud)


Ed *_* S. 7

我会很困惑地看到用于布尔值的枚举.你这么说:

注意:是的,我可以将它们存储为bool(这是它以前的工作方式).我的设计选择是明确用户做出的是/否选择,因为他们会看到这个
打印在其他内容中,我希望它更明显的选择是什么.

我没有看到"是"或"否"如何更"明确"而不是真或假.

  • 在程序中管理数据并将其可视化给用户是两件不同的事情。您可以使用布尔值并在可视化中将其翻译给您的用户。由于您枚举不是多语言,这也为您提供了更多选择。 (2认同)

Bur*_*ard 6

  • 是 否
  • 选择
  • 二元选择

或者只使用布尔值。


Jay*_*den 6

ResponseEnum或EResponse或UserResponse取决于您的约定.

我不会仅限于是或否,因为将来您可能希望添加需要不确定响应的功能.


Dan*_*ull 5

我想打个电话:

enum Boolean
{
     Yes,
     No
}
Run Code Online (Sandbox Code Playgroud)

不,等等,你已经可以使用内置的布尔类型了.

如果你在这里使用枚举的唯一原因是因为你想要向用户显示一个方便的字符串转换,那么当你做更复杂的事情时,你将会非常严重地陷入困境.从视图中分离模型将为您提供良好的服务.阅读MVC和/或MVVM模式.

我也可能会建议一个带有一些自定义属性的简单布尔值来定义要用来代替"true"和"false"的显示字符串.然后,您可以编写自己的字符串方法,以查找自定义属性.