0

メールアドレスまたはユーザー名が変更されていない場合に失敗する必要があるカスタムバリデーターに取り組んでいます。 基本的に、文字列比較の 1 つが true の場合、検証に合格します。私は単純なものを見落としていることを知っています。これが私がこれまでに持っているものです:

bool emailChanged = Domain.Validation.ItemsHaveChanged(txtEmailAddress.Text, emailAddress);
bool userNameChanged = Domain.Validation.ItemsHaveChanged(txtUserName.Text, userName);

// make sure at least the email or username has changed.
if (!emailChanged || !userNameChanged)
{
     args.IsValid = false;
     cvAccountChange.ErrorMessage = "There haven't been any changes to the account.";
 }

ここに方法がありますItemsHaveChanged

public static bool ItemsHaveChanged(string param1, string param2)
{
    return string.Compare(param1.Trim(), param2.Trim()) != 0;
}
4

2 に答える 2

4

論理 AND 演算子 ( )を探しています。&&

if (!emailChanged && !userNameChanged)
{
     args.IsValid = false;
     cvAccountChange.ErrorMessage = "There haven't been any changes to the account.";
}
于 2013-07-20T16:37:13.853 に答える
1

個人的には、ブロブディンナギアン状態を避けて、次のようにします。

if (emailChanged || usernameChanged) {
    // everything is fine
    return;
}

// neither changed
args.IsValid = false;
...

つまり、メソッドから早期に戻ることができると仮定します。(さらに、切り取ったコードを別のコードにいつでも抽出できます。)

または、次のようにして、早期復帰と複雑な式を回避できます。

var emailUnchanged = !ItemsHaveChanged(...);
var usernameUnchanged = !ItemsHaveChanged(...);

if (emailUnchanged || usernameUnchanged) {
    // neither changed
    args.IsValid = false;
    ...
}
于 2013-07-20T16:40:27.850 に答える