有什么方法可以使这种情况更简单?

时间:2018-12-04 08:57:58

标签: c# wpf

在我的WPF应用程序中,我有条件:

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    Regex regex = new Regex("[^a-zA-Z]+");

    string adresSerwera = (string)values[0];
    string port = (string)values[1];
    string imieNazwisko = (string)values[2];
    string adresEmail = (string)values[3];
    string haslo = (string)values[4];

    if (!string.IsNullOrWhiteSpace(adresSerwera) && !string.IsNullOrWhiteSpace(port)
            && !string.IsNullOrWhiteSpace(imieNazwisko) && !string.IsNullOrWhiteSpace(adresEmail)
            && !string.IsNullOrWhiteSpace(haslo) && (adresEmail).Contains('@') && (adresEmail).Contains('.') && regex.IsMatch(port))
    {
        return new ViewModels.KontoViewModel(adresSerwera, port, imieNazwisko, adresEmail, haslo);
    }
    else return null;
}

有什么方法可以更简单地编写if条件?

3 个答案:

答案 0 :(得分:3)

那呢:

if ((new[] {adresSerwera, port, imieNazwisko, adresEmail, haslo})
        .All(c => !string.IsNullOrWhiteSpace(c))
      && (adresEmail).Contains('@') && (adresEmail).Contains('.') && regex.IsMatch(port))
{
    return new ViewModels.KontoViewModel(adresSerwera, port, imieNazwisko, adresEmail, haslo);
}
return null;//The else is removed because it is redundant

您还可以将Contains替换为以下内容:

(new[]{ "@" , "." }).Contains(adresEmail)

或更简单的使用values参数:

if (values.All(c=> !string.IsNullOrWhiteSpace((string)c)) 
        && new[] { "@", "." }.Contains(adresEmail) && regex.IsMatch(port))

答案 1 :(得分:1)

您可以将strings放在列表中,并在返回最终结果的方法中进行遍历。

@Patrick我认为这样的方法不会很糟糕

public boolean AllNotNullOrWhiteSpace(List<string> items)
{
    return items.All(i=>!string.IsNullOrWhiteSpace(i));
}

答案 2 :(得分:-1)

我的C#技能有点生锈,但是您可以通过使用映射函数将函数检查IsNullOrWhiteSpace映射到值中的项目并检查是否为真来降低复杂度。这样,至少您不必分别调用它们。