-1

if明らかに異なる機能に取り組んでいる 3 つのステートメントがあります。それらを 1 つの関数に結合したかったので、ifステートメントを結合する必要があります。|| &&しかし、との使い方に行き詰まりました()

私の機能はフィルターとして機能し、ユーザーはどのテキストボックスにも入力できます。ボタンクリックイベントで、コードは基準を満たすものを見つけます。3つは単独でうまく機能しますが、それらを組み合わせるのは非常に困難です. 私は非常に新しいプログラマーであり、バックグラウンドはまったくありません。私は何日も立ち往生しています。;(

私のフィルターのスナップショット:

フィルター

初め:

if (itemAuthor.ToLower() == txtComAuthor.Text.ToString().ToLower())

2番:

if ((!DateTime.TryParseExact(txtComStartDate.Text, "dd/MM/yy", provider, DateTimeStyles.AssumeLocal, out startDate)
      || DateTime.Parse(itemDate, provider, DateTimeStyles.AssumeLocal) >= startDate) &&
      (!DateTime.TryParseExact(txtComEndDate.Text, "dd/MM/yy", provider, DateTimeStyles.AssumeLocal, out endDate)
      || DateTime.Parse(itemDate, provider, DateTimeStyles.AssumeLocal) <= endDate))

三番:

if (txtComKeyword1.Text != (String.Empty) && itemDescription.ToLower().Contains(txtComKeyword1.Text.ToLower()) ||
    txtComKeyword2.Text != (String.Empty) && itemDescription.ToLower().Contains(txtComKeyword2.Text.ToLower()) ||
    txtComKeyword3.Text != (String.Empty) && itemDescription.ToLower().Contains(txtComKeyword3.Text.ToLower()) ||
    txtComKeyword4.Text != (String.Empty) && itemDescription.ToLower().Contains(txtComKeyword4.Text.ToLower()))
4

4 に答える 4

4

|| を使用するかどうか または && は、少なくとも 1 つの条件が真である(|| を使用) か、すべての条件が真でなければならない(&& を使用) かによって異なります。

両方の意味を混在させる必要がある場合は、() を使用して条件を相互に評価させます。

if ( (a && b) || (c && d))

a と b の両方が true である 、 c と d の両方が true であるかを意味します。

複合ロジックの各部分に個別のブール値を定義すると、コードが読みやすくなり、維持しやすくなります。性能差はありません。

bool condition1 = !DateTime.TryParseExact(txtComStartDate.Text, "dd/MM/yy", provider, DateTimeStyles.AssumeLocal, out startDate);
bool condition2 = DateTime.Parse(itemDate, provider, DateTimeStyles.AssumeLocal) >= startDate);
bool condition3 = !DateTime.TryParseExact(txtComEndDate.Text, "dd/MM/yy", provider, DateTimeStyles.AssumeLocal, out endDate);
bool condition4 = DateTime.Parse(itemDate, provider, DateTimeStyles.AssumeLocal) <= endDate);

if ((condition1
      || condition2 &&
      (condition3
      || condition4)
于 2012-08-20T16:36:18.913 に答える
1

論理的なグループ化について疑問がある場合は、操作のすべてのペアを括弧で囲みます。そうすれば、ペアがどのように組み合わされるかがわかります。

if ((A && B) || (C && D))(A && B)andセグメントを評価し、(C && D)それらの中間結果を一緒に「or」して最終値を生成します。

さらに読むには、ブール論理の可換、連想、および分配のプロパティを検索してください。

于 2012-08-20T16:37:39.937 に答える
0

私が知る限り、3つすべてを同時に評価したいのですが、それらを1つの大きな行に追加するだけでは、読みにくく、維持するのが難しくなります。以前の if ごとに個別の bool 値を設定することをお勧めします。

bool firstIf = (itemAuthor.ToLower() == txtComAuthor.Text.ToString().ToLower());

次に、1 つのステートメントで 3 つすべてを比較します。

if (firstIf && secondIf && thirdif)
{
    Console.WriteLine("It works!");
}

これにより、後で必要に応じて簡単に変更でき、コードを読むこともできます。

于 2012-08-20T16:36:26.573 に答える