nam*_*los 7 c# naming coding-style naming-conventions
在我正在编写的C#命令行应用程序中,有几个参数的"是"和"否"是可能的值.
我使用下面显示的Enum类型存储他们的输入.
enum YesNo
{
Yes,
No
}
Run Code Online (Sandbox Code Playgroud)
哪个好 - 代码有效.没问题.
注意:是的,我可以将它们存储为bool(这是它以前的工作方式).我的设计选择是明确用户做出的是/否选择,因为他们会在其他情况下看到这个选项,我希望它更明显的选择是什么.
我在StackOverflow的生命中相对较早地问过这个问题.这不是假问题 - 我确实遇到过这种情况.我只是觉得用它看看社区会做什么会很好.因为它,我承认一个有点奇怪的问题.
首先,感谢所有花时间回复的人.我试图用一个深思熟虑的结论来回报这个问题.
评论答案
切换到布尔.我理解你的动机,但我觉得我需要指出一个二元选择(并且我的意思是任意两个值之间的选择 - 活着/死亡,已婚/未婚等)与布尔选择之间的选择不同真假.我们发现程序员在yes/no和true/false之间切换容易 - 足够公平.如果我在这种情况下的选择是例如"民主党人"或"复制""(我知道的人为例子)那么你可以看到混淆或至少尴尬的可能性.我认为bool选项在这种情况下是有效的,但是更少所以在其他二元选择中.
本地化 - 伟大的观点.在我的具体情况下,它并不重要 - 这不是也不会被本地化,但对于其他情况,这是需要考虑的事情.
三个以上的选项 - 事实上,后来我不得不添加第三个值来表示用户的有效(在我的应用程序中)条件,特别是没有做出选择.
有很多好评,谢谢大家!
Jon*_*eet 37
你说你不想使用bool,因为它会被打印出来供用户查看其他内容.这表明问题不是存储而是显示.无论如何都要将是/否存在真/假,但是没有必要为它创建一个全新的类型IMO.
编辑:除了建议你不要摆在首位使用一个枚举,我强烈建议,如果你做使用一个枚举,你改变了顺序或使用显式值.如果您最终将值视为整数,则Yes = 0,No = 1将会非常混乱.
我会很困惑地看到用于布尔值的枚举.你这么说:
注意:是的,我可以将它们存储为bool(这是它以前的工作方式).我的设计选择是明确用户做出的是/否选择,因为他们会看到这个
打印在其他内容中,我希望它更明显的选择是什么.
我没有看到"是"或"否"如何更"明确"而不是真或假.
我想打个电话:
enum Boolean
{
Yes,
No
}
Run Code Online (Sandbox Code Playgroud)
不,等等,你已经可以使用内置的布尔类型了.
如果你在这里使用枚举的唯一原因是因为你想要向用户显示一个方便的字符串转换,那么当你做更复杂的事情时,你将会非常严重地陷入困境.从视图中分离模型将为您提供良好的服务.阅读MVC和/或MVVM模式.
我也可能会建议一个带有一些自定义属性的简单布尔值来定义要用来代替"true"和"false"的显示字符串.然后,您可以编写自己的字符串方法,以查找自定义属性.