3

フォーム上のすべてのテキスト ボックスが完成したときにコードを実行する if ステートメントがあります。

現時点ですべてのテキストボックスが空でないことを確認する方法は以下のとおりです

if (txtUserId.Text != ""
                    && txtFirstName.Text != ""
                    && txtLastName.Text != ""
                    && txtCity.Text != ""
                    && txtSTate.Text != ""
                    && txtCountry.Text != "")
                {
                    // Some code
                }

これを書く良い方法はありますか?

4

5 に答える 5

10

チェックアウトを関数に抽象化します。

bool IsFilled(TextBox tb) { return tb.Text != ""; }

次に、古い単純化されたコードを使用するか、次のトリックを使用できます。

var textBoxes = new [] { txtUserId, txtFirstName, ... };
if (textBoxes.All(tb => IsFilled(tb)) { ... }

これは、取得するテキスト ボックスが多いほど、おそらくよりスケーラブルです。

textBoxes.All(IsFilled)メソッド グループからデリゲートへの変換により、どちらが機能するかを記述することもできます。これはわずかにパフォーマンスが高く、短くなります。ただし、メソッド グループの変換は理解しにくく、誤解を招きやすいと思います。他の人はあなたに「それは何をするの?」と尋ねるかもしれません。これはコードの匂いを示しています。お勧めしません。

于 2013-09-24T11:24:16.167 に答える
3
TextBox[] boxes = new[] { txtUserId, txtFirstName, txtLastName, txtCity, txtSTate, txtCountry };

if (boxes.All(x => x.Text != ""))
{
    // Some code
}
于 2013-09-24T11:24:34.283 に答える
0

このような状況でもリフレクションを使用できます。複数のフィールドを持つユーザーの詳細で結果をフィルタリングしていたときに、同様の問題が発生しました。ユーザーが検索ボックスに何も入力しない場合、クエリはデータベースからすべての結果を返しますが、これは意図した結果ではありません。私は質問をして、初めて反省して会いました。

例えば:

以下のような UserDetail モデルがあります

public class UserDetail{

  public string FirstName {get;set;}

  public string LastName {get;set;}

  public string Country {get;set;}
}

次に、userDetail オブジェクトがあり、LINQ を使用して UserDetail オブジェクトのプロパティが null または空でないことを確認したいとします。

return userDetail.GetType().GetProperties()
    .Where(pi => pi.GetValue(userDetail) is string)
    .Select(pi => (string) pi.GetValue(userDetail))
    .All(value => !String.IsNullOrEmpty(value));

userDetail オブジェクトの文字列プロパティが null または空でない場合、このメソッドは true を返します。すべてのプロパティに何かが含まれている場合、これは true を出力します。

あなたのロジックは次のようになります。

public bool AllUserDetailsContainSomething(UserDetail userDetail){

 return userDetail.GetType().GetProperties()
        .Where(pi => pi.GetValue(userDetail) is string)
        .Select(pi => (string) pi.GetValue(userDetail))
        .All(value => !String.IsNullOrEmpty(value));

} 

次に、このメソッドを呼び出すことができます

if(AllUserDetailsContainSomething(userDetail)){
 //do something
}
于 2016-10-15T21:21:44.377 に答える
0

TextBoxフォーム内の es をループできます。

private bool AreThereAnyEmptyTextBoxes()
{
    foreach (var item in this.Controls)
    {
        if (item is TextBox)
        {
            var textBox = (TextBox)item;
            if (textBox.Text == string.Empty)
            {
                return true;
            }
        }
    }

    return false;
}
于 2013-09-24T11:29:11.053 に答える