2

コントロールの 2 つのグループがあります。

最初のものには、a、b、c という名前の 3 つのテキストボックスが含まれています。それらはすべて同時に有効または無効にすることができます。

2 番目のグループには、2 つのテキスト ボックス (d と e) が含まれます。一度に 1 つだけ有効になります。

これで、次の場合に true となるブール変数 (ok という名前) が作成されました。

  • a、b、c の少なくとも 1 つが有効で、かつテキストが含まれている
  • 有効な 2 番目のグループのテキスト ボックスにテキストが含まれています
  • テキストを含めずに有効にすることはできません

そして、1回の呼び出しですべてを確認したい。

ここに私が得るものがあります:

bool ok =
(
    (
        (
            (!a.IsEnabled ||
                (a.IsEnabled && !String.IsNullOrWhiteSpace(a.Text))) &&
            (!b.IsEnabled ||
                (b.IsEnabled && !String.IsNullOrWhiteSpace(b.Text))) &&
            (!c.IsEnabled ||
                (c.IsEnabled && !String.IsNullOrWhiteSpace(c.Text))) &&
            (a.IsEnabled || b.IsEnabled || c.IsEnabled)
        )
    ) &&
    (
        (!d.IsEnabled ||
            (d.IsEnabled && !String.IsNullOrWhiteSpace(d.Text))) &&
        (!f.IsEnabled ||
            (f.IsEnabled && !String.IsNullOrWhiteSpace(f.Text)))
    )
);

それは目にはかなり重いです、それを単純化する方法について何か考えはありますか?

4

3 に答える 3

3

はい。

!a.IsEnabled || (a.IsEnabled && !String.IsNullOrWhiteSpace(a.Text))

に簡略化できます

!a.IsEnabled || !String.IsNullOrWhiteSpace(a.Text)
于 2014-08-21T13:22:31.260 に答える
2

ヘルパー拡張メソッドを追加することで、ロジックの処理を簡素化できます。

private static bool IsDisabledOrNotEmpty(this TextBox tb) {
    return !tb.IsEnabled || !String.IsNullOrWhiteSpace(tb.Text);
}

これで、次のようにロジックを書き直すことができます。

bool ok =
    a.IsDisabledOrNotEmpty()
&&  b.IsDisabledOrNotEmpty()
&&  c.IsDisabledOrNotEmpty()
&&  (a.IsEnabled || b.IsEnabled || c.IsEnabled)
&&  d.IsDisabledOrNotEmpty()
&&  f.IsDisabledOrNotEmpty();
于 2014-08-21T13:27:32.860 に答える