Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';“是”和“是”的枚举是个好名字;没有价值观 背景_C#_Coding Style_Naming Conventions_Naming - Fatal编程技术网

C# 什么';“是”和“是”的枚举是个好名字;没有价值观 背景

C# 什么';“是”和“是”的枚举是个好名字;没有价值观 背景,c#,coding-style,naming-conventions,naming,C#,Coding Style,Naming Conventions,Naming,在我正在编写的一个C#命令行应用程序中,有几个参数的可能值为“是”和“否” 我使用下面显示的枚举类型存储它们的输入 enum YesNo { Yes, No } 这很好——代码可以工作。没问题 注意:是的,我可以将它们存储为bool(这就是它过去的工作方式)。我的设计选择是明确说明用户所做的是/否选择,因为他们会在其他上下文中看到这一点,我希望这一选择更加明显 我的问题 有一个名为“YesNo”的枚举似乎很奇怪——对于“yes”和“no”值的枚举,有哪些更好的名称建议

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

我使用下面显示的枚举类型存储它们的输入

enum YesNo
{
     Yes,
     No
}
这很好——代码可以工作。没问题

注意:是的,我可以将它们存储为bool(这就是它过去的工作方式)。我的设计选择是明确说明用户所做的是/否选择,因为他们会在其他上下文中看到这一点,我希望这一选择更加明显

我的问题
  • 有一个名为“YesNo”的枚举似乎很奇怪——对于“yes”和“no”值的枚举,有哪些更好的名称建议
所以最后 我在StackOverflow生命的早期就提出了这个问题。这不是一个假问题——我确实遇到过这种情况。我只是觉得使用它会很好,看看社区会怎么做。正因为如此,我承认一个有点奇怪的问题

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

对答案的评论

切换到bool。我理解你的动机,但我觉得我需要指出的是,有一个二进制选择(我的意思是在任何两个值之间进行选择-活着/死了,已婚/未婚等等)与布尔值在真与假之间的选择是不同的。我们发现,作为程序员,在是/否和真/假之间进行切换很容易——很公平。如果我在本例中的选择是“democratic”或“Replication”(我知道这是一个人为的例子),那么你可以看到混淆的可能性,或者至少是尴尬的可能性。我确实认为bool选项在本例中是有效的,但在其他二进制选择中就不那么有效了

<强>局域化<强> -大点。在我的特定情况下,这并不重要——这不是,也永远不会被本地化,但是对于其他情况,这是一个值得考虑的问题。

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

有很多好的评论,谢谢大家!

EUserAction

您将其描述为一些用户操作。不过,您也可以更具体一些。该名称允许将来进行一些其他选择。(名称应该是选择的目的,而不是选择的内容)

然而,对于你的另一个微妙的问题:

因为他们会在其他情况下看到这一点,我希望这一点更加明显,这是什么选择

用户看到什么并不重要。数据模型可能与您呈现给用户的数据模型非常不同。bool就足够了。将来是否有可能采取其他行动?

  • 是的
  • 选择
  • 二进制选择

或者只使用一个布尔值。

如果看到一个用于布尔值的枚举,我会感到困惑。你说:

注意:是的,我可以将这些存储为bool(这就是它过去的工作方式)。我的设计选择 要明确用户所做的是/否选择,因为他们会看到这一点
印刷在其他内容,我想它是更明显的选择是什么


我看不出“是”或“否”如何比“真”或“假”更“明确”。

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


我不会把自己限制在“是”或“否”的范围内,因为将来您可能还想添加需要不确定响应的功能。

您说您不想使用bool,因为它将打印出来供用户在其他内容中查看。这表明问题不在存储中,而在显示中。请务必像Ye一样呈现真/假s/No,但是没有必要为它创建一个全新的类型


<>编辑:除了建议你不要使用枚举,我强烈建议如果你使用EnUM,你改变顺序或者使用显式的值。如果是Yes=0,如果你最终把这些值看作整数,那么No=1将非常混乱。

< P>我认为YesNo很好。考虑诸如“MbOK OK”和“MbY-YESNO”之类的东西。" ... 我知道这不是一种类型,但任何可以自我解释的都可以

是否有可能使用除“是/否”之外的选项。对于仅2个选项,请使用布尔值。尝试单独修改显示区域

我阅读了您更新的解释,但我仍然觉得这是一个糟糕的选择。布尔人的存在正是为了这个目的。您有责任确保在“他们将在其他内容中看到此打印内容”时输出适当的文本。这可以简单到:

Console.WriteLine(u(“使用Foo:”)+(使用Foo?u(“是”):(“否”))

同时仍然完全支持本地化。useFoo当然是一个参数,告诉函数是否正在使用foo.:)

_u是gettext函数()的缩写,可用于C#()。

(幽默-请不要把它当回事…)

我很惊讶还没有人提出这个建议:

public enum UserWtf
{
    No,
    Yes,
    FileNotFound
}

我看不出这个枚举有什么意义,除非除了是和否之外还有其他值。那只是一个布尔值。做一个枚举只是为了不必输入是或否似乎有点愚蠢。

我想称之为:

enum Boolean
{
     Yes,
     No
}
不,等等,已经有一个内置的布尔类型可以使用

如果在这里使用枚举的唯一原因是为了方便地与要向用户显示的字符串进行转换,那么当您执行更复杂的操作时,您将受到非常严重的影响。模型和视图的分离将很好地为您服务。阅读MVC和/或MVVM模式

我可能还建议,一个简单的布尔值,带有一些自定义属性,这些属性定义了用于替代“true”和“false”的显示字符串,在这里就足够了。然后,您可以编写自己的to/from字符串方法t

public enum Married
{
    YES,
    NO
}