方案: 让我们说我们要检查地址线。其中包括addressline1,addressline2,Town,Country,Postcode 如果输入任何一个属性,则所有其他字段都是必填字段。 如果没有输入,验证不必被触发。
为实现这一目标,我最终得到了两行If语句。 喜欢
if(AddressLine1 != null || AddressLine2 != null || Town != null || Country != null)
{
if(AddressLine1 != null && AddressLine2 != null && Town != null && Country != null) == false
{
return false;
}
}
注意:我正在使用c#。有没有可以使用的语言结构。
答案 0 :(得分:8)
private bool IsAddressValid(params string[] addressParts)
{
return addressParts.Any(p => p != null) ? addressParts.All(p => p != null) : true;
}
像这样被召唤:
var addressValid = IsAddressValid(AddressLine1, AddressLine2, Town, County);
答案 1 :(得分:6)
好吧,null-coalescing运算符可以帮助第一个:
if (AddressLine1 ?? AddressLine2 ?? Town ?? Country != null)
{
if (AddressLine1 == null || AddressLine2 == null ||
Town == null || Country == null)
{
return false;
}
// Presumably there's more here
}
您可能希望编写一些辅助方法:
if (IsAnyNonNull(AddressLine1, AddressLine2, Town, Country))
{
if (IsAnyNull(AddressLine1, AddressLine2, Town, Country))
{
return false;
}
}
实用程序方法类似于:
public static bool IsAnyNonNull(params object[] values)
{
return values.Any(x => x != null);
}
public static bool IsAnyNull(params object[] values)
{
return values.Any(x => x == null);
}
当然,你仍然有两个if
陈述 - 但我认为无论如何这基本上是必要的。
答案 2 :(得分:6)
如果你在组中创建一个字段数组,那么你可以这样做:
var fields = new object[] {AddressLine1, AddressLine2, Town, Country};
return fields.All(f => f == null) || fields.All(f => f != null);
答案 3 :(得分:0)
定义:
public static bool SameNullness(params object[] values)
{
int nullCount = 0;
foreach (var value in values)
{
if (value == null) nullCount++;
}
return nullCount == values.Length;
}
然后使用它:
SameNullness(AddressLine1, AddressLine2, Town, Country);