1

わかりました、ネットを1時間検索して、質問に対する解決策があるかどうかを見つけようとしました. 問題は次のとおりです: if 句に入れたステートメントに解析される文字列を挿入する方法はありますか?

シナリオ: ブラウザーからの情報を解析する小さなソフトウェアを構築しています。各ブラウザーはデータを異なる方法で表現するため、ブラウザーに応じて異なる質問をしなければならない IF ステートメントが必要ですが、IF ..... ELSE IF ですべての質問をしたくはありません... . そしてそれはすべて間違っているからです.

ユーザーが FF から来た場合、問題はページに特定の文字列が含まれているかどうかです。ユーザーが IE から来た場合、問題は 100 行のテキストがあるかどうかです。

質問は異なり、すべてのブラウザーからの情報を解析するためにコーディングしている関数の外部からステートメントを送信できるかどうかを知りたいですか、それともブラウザーに応じて質問する必要がありますか?

4

2 に答える 2

1

You can use a Func<> predicate to send a part of the code into a method:

private void Parse(string data, Func<string, bool> question) {
  if (question(data)) {
    // go on
  }
}

You can call it with anything that is a function that matches the signature, like:

private bool CheckFx(string data) {
  return data.IndexOf("Hello") != -1;
}

Parse(data, CheckFx);

or:

Parse(data, s => s.Split(Environment.Newline).Length >= 100);

You can also keep the predicate in a variable while choosing what to use:

Func<string, bool> question;
switch (browser) {
  case Browser.IE: question = CheckIE; break;
  case Browser.Fx: question = CheckFx; break;
  default: question = CheckOther; break;
}
Parse(data, question);
于 2013-06-28T08:47:37.663 に答える