C# 检查两项是否已更改

C# 检查两项是否已更改,c#,validation,C#,Validation,我正在开发一个自定义验证器,如果电子邮件地址或用户名没有更改,它就需要失败。基本上,如果其中一个字符串比较为真,那么它将通过验证。我知道我忽略了一些简单的事情。以下是我到目前为止的情况: bool emailChanged = Domain.Validation.ItemsHaveChanged(txtEmailAddress.Text, emailAddress); bool userNameChanged = Domain.Validation.ItemsHaveChanged(txtUse

我正在开发一个自定义验证器,如果电子邮件地址或用户名没有更改,它就需要失败。基本上,如果其中一个字符串比较为真,那么它将通过验证。我知道我忽略了一些简单的事情。以下是我到目前为止的情况:

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;
}
你在找那个

你在找那个


就个人而言,我会避免brobdingnagian条件,只需:

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;
    ...
}

就个人而言,我会避免brobdingnagian条件,只需:

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;
    ...
}

更好的方法是通过推理输入何时有效。如果电子邮件已更改或用户名已更改,则输入有效:
emailChanged | | userNameChanged
。因此,如果相反为真,则输入无效:
!(emailChanged | | userNameChanged)
。然后,声明这相当于
!emailChanged&!用户名已更改
。因此,
&&
.Mattias,+1对于这个很好的解释和提到De MorganA,更好的方法是通过推理输入何时有效。如果电子邮件已更改或用户名已更改,则输入有效:
emailChanged | | userNameChanged
。因此,如果相反为真,则输入无效:
!(emailChanged | | userNameChanged)
。然后,声明这相当于
!emailChanged&!用户名已更改
。因此,
&&
.Mattias,+1对于这个很好的解释和提到德摩加尼,我倾向于同意你的想法,即所有的“动作”都会发生在
其他
部分,这似乎也是backwards@JonHarding在七行的方法中,我认为这一点都不会损害可读性,或者至少不比解析带有许多否定的布尔表达式更糟糕。我也强烈希望在特殊情况下尽早保释,以避免,“我无事可做”可以被视为其中之一。@JonHarding说,你的评论让我稍微有点横向思考,我现在增加了另一种方式,这避免了提前返回,同时通过将否定移到局部变量的名称中,使条件更容易解析。我倾向于同意您的想法,即所有的“操作”都将发生在
else
部分,这似乎也是backwards@JonHarding用七行的方法,我不知道认为这会损害可读性,或者至少不会比解析带有许多否定的布尔表达式更糟糕。我也强烈希望在特殊情况下尽早保释,以避免,“我无事可做”可以被视为其中之一。@JonHarding说,你的评论让我稍微有点横向思考,我现在增加了另一种方式,这避免了提前返回,同时通过将否定移到局部变量的名称中,使条件更容易解析。