10

バックグラウンド

私が書いている C# コマンド ライン アプリでは、いくつかのパラメーターに可能な値として "yes" と "no" があります。

以下に示す列挙型を使用して入力を保存しています。

enum YesNo
{
     Yes,
     No
}

これは問題ありません-コードは機能します。問題ありません。

注: はい、これらを bool として保存できます (これが以前の動作方法でした)。私の設計上の選択は、ユーザーが行ったはい/いいえの選択について明示することです。これは、他のコンテキストでこれが表示されるため、選択が何であったかをより明確にしたいからです。

私の質問

  • 「YesNo」と呼ばれる列挙型を持つのは奇妙に思えます - 「はい」と「いいえ」の値の列挙型のより良い名前の提案は何ですか.

最後に

私はこの質問を、StackOverflow の開発の比較的早い段階で行いました。それは偽の質問ではありませんでした - 私は本当にこのような状況にありました. コミュニティが何をするかを見て、それを使用するのはいいことだと思いました。ですので、ちょっと変わった質問をさせていただきます。

まず、返信に時間を費やしてくれたすべての人に感謝します。私は思慮深い結論でそれを返済しようとしています.

回答に対するコメント

bool に切り替えます。私はあなたの動機を理解していますが、二者択一(つまり、生きているか死んでいるか、既婚か未婚かなど、任意の 2 つのの間の選択を意味します)を持つことは、真と偽。プログラマーは、yes/no と true/false を簡単に切り替えることができます。この場合の私の選択が、たとえば「民主主義者」または「複製」」(不自然な例であることはわかっています) であった場合、混乱または少なくともぎこちなさの可能性を見ることができます。この場合、bool オプションは有効だと思いますが、それ以下です。他のバイナリ選択でもそうです。

ローカリゼーション- すばらしい点です。私の特定のケースでは問題ではありませんでした.これはローカライズされていませんでした.ローカライズされることもありません.

3 つ以上のオプション- 実際、後になって、具体的に選択しないユーザーの有効な (アプリケーションでの) 状態を表すために、3 番目の値を追加する必要がありました。

嬉しいコメントがたくさんありました、ありがとうございます!

4

17 に答える 17

39

ユーザーが他のコンテンツの中で見るために印刷されるため、 bool を使用したくないと言います。これは、問題がストレージではなくディスプレイにあることを示唆しています。必ず true/false を Yes/No として提示しますが、IMO 用にまったく新しい型を作成する必要はありません。

編集:そもそも列挙型を使用しないことを提案することに加えて、列挙型を使用する場合、順序を変更するか、明示的な値を使用することを強くお勧めします。はい = 0、いいえ = 1 の場合、値が整数として表示される場合、非常に混乱します。

于 2008-12-22T07:07:24.403 に答える
12

[はい]または[いいえ]に設定されている値を示す名前を使用することをお勧めします。

例えば


public enum Married
{
    YES,
    NO
}
于 2008-12-22T12:35:29.390 に答える
8

ブール値に使用される列挙型を見ると混乱します。あなたはこう言います:

注: はい、これらを bool として保存できます (これが以前の動作方法でした)。私のデザインの選択は、ユーザーが行ったはい/いいえの選択について明示することです。これ
は、他のコンテンツに表示されるため、選択が何であったかをより明確にしたいからです。

「はい」または「いいえ」が、真または偽よりも「明示的」であることがわかりません。

于 2008-12-22T07:03:32.290 に答える
6

規則に応じて、ResponseEnum または EResponse または UserResponse。

将来的には、不明な応答も必要とする機能を追加する可能性があるため、はいまたはいいえだけに限定するつもりはありません。

于 2008-12-22T07:05:59.600 に答える
5

私はそれを呼びたいです:

enum Boolean
{
     Yes,
     No
}

いいえ、待ってください。使用できる組み込みのブール型が既にあります。

ここで列挙型を使用する唯一の理由が、ユーザーに表示したい文字列との間の便利な変換があるためである場合は、より洗練された処理を行うにつれて、非常にひどく苦しめられることになります。ビューからモデルを分離すると、うまく機能します。MVC や MVVM のパターンを読んでください。

ここでは、「true」と「false」の代わりに使用する表示文字列を定義するいくつかのカスタム属性を持つ単純なブール値で十分であることもお勧めします。その後、カスタム属性を検索する独自の to/from 文字列メソッドを作成できます。

于 2008-12-22T10:19:51.300 に答える
4
  • はい・いいえ
  • 選択
  • バイナリーチョイス

または、ブール値を使用してください。

于 2008-12-22T07:00:27.100 に答える
3

列挙型はまったく使用しません。独自のタイプコンバーターをロールしてブール値を使用するだけです。

于 2008-12-22T10:26:01.977 に答える
2

(ユーモア -これを真剣に受け止めないでください...)

私はまだ誰もこれを提案していないことに驚いています:

public enum UserWtf
{
    No,
    Yes,
    FileNotFound
}
于 2008-12-22T07:52:48.243 に答える
2

ブール値の表示に問題があると思います。ブール値を格納する単純なラッパーを作成して、Yes/No または True/False として表示できるようにすることをお勧めします。

于 2008-12-22T12:30:09.790 に答える
2

YesNoでいいと思います。「MB_OK」や「MB_YESNO」などを考えてみてください...タイプではないことはわかっていますが、自明のものであれば何でも問題ありません。

于 2008-12-22T07:10:50.293 に答える
2

はい/いいえ以外のオプションを持つ可能性はありますか.2つのオプションのみブール値に固執します.表示領域だけを変更してみてください

于 2008-12-22T07:12:13.240 に答える
1

更新された説明を読みましたが、これはまだ悪い選択だと思います。ブール値はまさにこの目的のために存在します。「これが他のコンテンツに表示される」場合に適切なテキストが出力されるようにするのは、ユーザーの責任ですこれは次のように簡単です。

Console.WriteLine(_("Foo の使用: ") + (useFoo ? _("はい") : _("いいえ")));

ローカリゼーションを完全にサポートしながら。もちろん、useFoo は関数が foo を使用しているかどうかを示すパラメーターです。:)

_ は gettext 関数 ( http://www.gnu.org/software/gettext/ )の略で、C# で利用できます ( http://www.gnu.org/software/automake/manual/gettext/C_0023 .html )。

于 2008-12-22T07:19:17.407 に答える
1

Flag.Yesこのようなものが必要なときは、、、などのようにフラグという言葉を使用しますMarriedFlag.No

これが役立つ場合の例: 現在、Yes と No の値しかないことはわかっていますが、将来、追加の値 (Maybe など) が存在する可能性があると思われます。

于 2012-02-01T04:54:06.047 に答える
1

EUserAction ?

あなたはそれを何らかのユーザーアクションとして説明しました。ただし、より具体的にすることもできます。この名前により、将来、いくつかの追加の選択肢が可能になります。(名前は、選択肢の目的ではなく、選択肢の目的である必要があります)

ただし、他の微妙な質問については:

彼らはこれが他の文脈で印刷されるのを見るので、私は選択が何であったかをより明白にしたいと思っています.

ユーザーに何が見えるかは問題ではありません。データ モデルは、ユーザーに提示するものとは大きく異なる場合があります。bool で十分だったでしょう。将来的に追加のアクションの可能性はありますか?

于 2008-12-22T06:59:23.437 に答える
0

Yes と No 以外の値がない限り、この列挙型のポイントはわかりません。それは単なるブール値です。そして、「はい」または「いいえ」を入力する必要がないように列挙型を作成するのは、ばかげているように思えます。

于 2008-12-22T07:54:11.877 に答える
0

表示目的で bool.TrueString および bool.FalseString と組み合わせて bool を使用します。

于 2008-12-22T19:13:45.700 に答える
0

私は OptionalBinaryFilter を次の目的で使用します。

はい、いいえ、すべて

ただし、Yes と No しかない場合は、メンバーでブール値を使用する方が適しているようです。

于 2017-11-23T11:30:28.753 に答える