Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Programming languages 避免多重If';c#中的s-最佳实践_Programming Languages_C# 3.0 - Fatal编程技术网

Programming languages 避免多重If';c#中的s-最佳实践

Programming languages 避免多重If';c#中的s-最佳实践,programming-languages,c#-3.0,Programming Languages,C# 3.0,情景: 假设我们要检查地址行。其中包括addressline1、addressline2、城镇、国家、邮政编码 如果输入任何一个属性,则所有其他字段都是必填字段。 如果没有输入任何内容,则不必触发验证 为了实现它,我最终得到了两行If语句。 像 注意:我使用的是c#。有什么语言结构我可以使用。嗯,空合并操作符可以帮助实现第一个: if (AddressLine1 ?? AddressLine2 ?? Town ?? Country != null) { if (AddressLine1

情景: 假设我们要检查地址行。其中包括addressline1、addressline2、城镇、国家、邮政编码 如果输入任何一个属性,则所有其他字段都是必填字段。 如果没有输入任何内容,则不必触发验证

为了实现它,我最终得到了两行If语句。 像


注意:我使用的是c#。有什么语言结构我可以使用。

嗯,空合并操作符可以帮助实现第一个:

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
语句,但我认为这在这里基本上是必要的。

如果您在组中创建一个字段数组,那么您可以执行以下操作:

var fields = new object[] {AddressLine1, AddressLine2, Town, Country};
return fields.All(f => f == null) || fields.All(f => f != null);
这样称呼:

var addressValid = IsAddressValid(AddressLine1, AddressLine2, Town, County);
定义如下:

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); 

Jon,你能澄清一下你是应该使用
params object[]
还是
IEnumerable
作为静态方法的数据类型吗?@Kane:我已经使用了
params object[]
,这样你就可以把它称为
IsAnyNull(x,y,z等)
,而不是显式地创建一个新集合。
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);