あなたはいくつかの利点を取ることができます:あなたはTextBox.Nameプロパティに意味のある名前を割り当てることができ
ていますか?その場合は、 "IsWithinRange"の2番目のパラメータを省略し、単に "Textbox.Name"を呼び出すことができます。
C#6.0では、文字列を補間する構文が追加されました。したがって、MessageBox.Show構文に渡される文字列は、短くてきれいにすることができます。
"条件"にすぐに割り当てることができ、 "if"ステートメントを結合 "and"ステートメントに変換することができます。すべて一緒に
、あなたのコードは次のようになります。
bool condition =
CheckAll()
&& IsWithinRange(txtVar1, 1, 50)
&& IsWithinRange(txtVar2, -100, 100)
&& IsWithinRange(txtVar3, 100, 200);
// Some other code here
あなたの方法では、このように見える:
public bool IsWithinRange(TextBox textbox, int min, int max) {
double number = double.Parse(textbox.Text);
if (number < min || number > max) {
MessageBox.Show($"{textbox.Name} must be between {min} and {max}.", "Entry Error");
textbox.Focus();
return false;
}
else
return true;
}
これは、あなたが実際には "条件" を使用すると仮定しています。そうでない場合、 "bool condition ="を省略することができ、コードはまったく同じになります。
ただし、注意すべき点がいくつかあります。 "CheckAll"がfalseまたは "IsWithinRange"がfalseの場合でも、コードは実行され続けます。これは、上記のバージョンまたはあなた自身のバージョンに当てはまります。はい、あなたのユーザにメッセージが届きますが、彼が「大丈夫」をクリックすると、チェックが失敗しても残りのコードが実行されます。
また、「IsWithinRange」は、チームメイトによって、または将来自分で誤って解釈される可能性があります。これはtrue/falseを返すだけではなく、falseの場合にメッセージを送信するためです。これはcommand-query separationの原則に違反します。
これらの問題へのアプローチは、簡潔さを無視しています。これは、望ましいものですが決して最も高い目標ではありません。クラスかどうかを決定するために
var validator =
new Validator()
.CheckAll()
.CheckRange(txtVar1, 1, 50)
.CheckRange(txtVar2, -100, 100)
.CheckRange(txtVar3, 100, 200);
if (!validator.isValid) {
validator.ShowErrorsToUser();
txtVar1.Focus();
return; // Stop code execution!
}
// Continue with your normal logic that utilizes your textbox values.
を私はあなたにそれを残しておきます:あなたはこのように使用する
class Validator {
public bool isValid = true;
public List<string> messages = new List<string>();
public Validator CheckAll() {
// Whatever your logic is for this.
return this; // Return the instance of "Validator" that called this method
}
public Validator CheckRange (TextBox textbox, int min, int max) {
double number = double.Parse(textbox.Text);
if (number < min || number > max) {
messages.Add($"{textbox.Name} must be between {min} and {max}.");
isValid = false;
}
return this;
}
public void ShowErrorsToUser() =>
MessageBox.Show(string.Join(Environment.NewLine, messages));
}
:何ができることは、その方法の作業を分ける検証クラスを作成することですベースのアプローチはあなたの時間の価値があります。しかし、私はそれをあなたと異なる考え方で提示します。
タグにC#を追加することを検討してください。あなたはあなたの質問を見る人が増えるかもしれません。また、私は論理を落としてしまいます。なぜなら、それらの質問は、構文を記述するのではなく、論理を第一の関心事として持つ傾向があるからです。最後に、私の回答で言及しなかったが、Try/Catchステートメントを調べることを検討する。 – pwilcox