在我的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
条件?
答案 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
映射到值中的项目并检查是否为真来降低复杂度。这样,至少您不必分别调用它们。