0

条件付きと論理的 || については、やや不明確です。オペレーター。さて、私が今書いたことを見て、それをもう一度言いましょう: 私のコードは、条件付き OR と論理 OR の違いに基づいて、本来すべきことを実行しません。

デフォルトでテキストプロパティが「mm/yyyy」に設定されている日付フィールドとしてテキストボックスがあります。私のバリデーターは、この条件と空の値 (2 つの引用符 /""/ マークの場合と同様) に対しても true と評価します。だから、このすべての後、私はこれで値をチェックしています:

if (tbEndDateMo.Text != "mm/yyyy" | tbEndDateMo.Text != "" | tbEndDateMo.Text != string.Empty)

値が「mm/yyyy」の場合はIF内を通過し、値が空白の場合も同様です。このMicrosoft リファレンスを見ると、違いがわかり、これに基づいてコードを書いたと思いましたが、思い通りに動作しません。テキスト ボックスが "mm/yyyy" または空白 (または空) と評価される場合は、IF をスキップします。私は何を間違っていますか?

ありがとう、

りしょう

4

3 に答える 3

2

あなたの条件は正しくありません-100%の可能性があります、それは同時に空の文字列tbEndDateMo.Textと等しくないか、"mm/yyy" または等しくありません!

次のことを確認する必要があります。

if (tbEndDateMo.Text != "mm/yyyy" && tbEndDateMo.Text != "" && tbEndDateMo.Text != string.Empty)

ただし、string.IsNullOrEmpty代わりにメソッドの使用を検討する必要があります== string.Empty

if (!string.IsNullOrEmpty(tbEndDateMo.Text) && tbEndDateMo.Text != "mm/yyyy")
于 2013-02-25T17:59:08.507 に答える
1

プログラムの流れの問題点が指摘されています。論理 OR が条件付き OR のように機能しているように見えるとあなたが主張していることに気付きました。ここのドキュメントを読むと、論理型または型が整数型の場合にのみ実行されることがわかります。ご覧のとおり、それらはブール値であるため、条件付き OR を計算します:)

于 2013-02-25T18:03:26.607 に答える
0

あなたの認識された論理には誤りがあります。これを調べます:

tbEndDateMo.Text を "" に等しくし、式を減らしましょう

tbEndDateMo.Text != "mm/yyyy" | tbEndDateMo.Text != "" | tbEndDateMo.Text != string.Empty
"" != "mm/yyyy" | "" != "" | "" != string.Empty
true | false | false
true

おそらくあなたが望んでいた:

tbEndDateMo.Text != "mm/yyyy" && tbEndDateMo.Text != "" && tbEndDateMo.Text != string.Empty

また、「論理」および「条件付き」OR/AND がないことに注意してください。それらは「ビット単位」および「ロジック」と呼ばれます *)。それらの唯一の違いは非常に微妙です。|| ということです。&& は、必要のない部分式を評価しません。& 常に評価します。したがって:

MyClass x = null; // intentional

if( x != null && x.Field > 8)  // will NOT throw
        ...

if( x != null & x.Field > 8)  // WILL throw NullReferenceException
        ...

*) わかりました、多分私は古い命名法に慣れています. とにかく、私が書いた残りの部分は有効です.

于 2013-02-25T17:59:48.910 に答える