C#比较4个字符串并忽略空字符串的最佳方法

C#比较4个字符串并忽略空字符串的最佳方法,c#,C#,我想比较4个字符串是否相等。问题是我必须忽略空字符串,但是如果它们all为空,那么该方法也必须返回true,因为所有空字符串都是相等的。我可以像这样把一切都写下来 if(string1 != string.Empty && string2 != string.Empty && string1 != string2) { return false } if(string1 != string.Empty && st

我想比较4个字符串是否相等。问题是我必须忽略空字符串,但是如果它们all为空,那么该方法也必须返回true,因为所有空字符串都是相等的。我可以像这样把一切都写下来

if(string1 != string.Empty && string2 != string.Empty &&
               string1 != string2)
{
   return false
}
if(string1 != string.Empty && string2 != string.Empty &&  string3 != etc....
但我认为有一个更好的方法,然后写下所有的可能性。
但是怎么做呢

像这样的?对字符串数组执行
Distinct
并检查
Count

var strings = new string[] {"str1", "str2", "str3"};

if( (strings.Where(s=>!string.IsNullOrEmpty(s)).Distinct().Count() == 1))
{       
    // unique
}

像这样的?对字符串数组执行
Distinct
并检查
Count

var strings = new string[] {"str1", "str2", "str3"};

if( (strings.Where(s=>!string.IsNullOrEmpty(s)).Distinct().Count() == 1))
{       
    // unique
}

这将检查所有非空或非空字符串是否相等:

public static bool CheckNonEmptyStringsForEquality(params string[] strings)
{
    string target = strings.FirstOrDefault(s => !string.IsNullOrEmpty(s));

    if (target == null)
        return false;

    return strings.All(s => string.IsNullOrEmpty(s) || s == target);
}
像这样使用它:

Console.WriteLine(
    CheckNonEmptyStringsForEquality("", "X", "X")); // Prints true

Console.WriteLine(
    CheckNonEmptyStringsForEquality("", "X", "Y")); // Prints false

Console.WriteLine(
    CheckNonEmptyStringsForEquality("", "X", "", "X", "", "X", "")); // Prints true
注意:如果要在所有字符串都为null或空时返回true,请执行以下操作:

public static bool CheckNonEmptyStringsForEquality(params string[] strings)
{
    string target = strings.FirstOrDefault(s => !string.IsNullOrEmpty(s));
    return strings.All(s => string.IsNullOrEmpty(s) || s == target);
}
那么这也将返回true:

Console.WriteLine(
CheckNonEmptyStringsForEquality("", "", "")); // Prints true

这将检查所有非空或非空字符串是否相等:

public static bool CheckNonEmptyStringsForEquality(params string[] strings)
{
    string target = strings.FirstOrDefault(s => !string.IsNullOrEmpty(s));

    if (target == null)
        return false;

    return strings.All(s => string.IsNullOrEmpty(s) || s == target);
}
像这样使用它:

Console.WriteLine(
    CheckNonEmptyStringsForEquality("", "X", "X")); // Prints true

Console.WriteLine(
    CheckNonEmptyStringsForEquality("", "X", "Y")); // Prints false

Console.WriteLine(
    CheckNonEmptyStringsForEquality("", "X", "", "X", "", "X", "")); // Prints true
注意:如果要在所有字符串都为null或空时返回true,请执行以下操作:

public static bool CheckNonEmptyStringsForEquality(params string[] strings)
{
    string target = strings.FirstOrDefault(s => !string.IsNullOrEmpty(s));
    return strings.All(s => string.IsNullOrEmpty(s) || s == target);
}
那么这也将返回true:

Console.WriteLine(
CheckNonEmptyStringsForEquality("", "", "")); // Prints true

如果在数组中传递字符串

var collection = new string[] { "India", "", "India", "India" };
var isEqual = collection.Distinct().Contains("") ? collection.Distinct().Count() <= 2 : collection.Distinct().Count() == 1;
var collection=newstring[]{“India”、“”、“India”、“India”};

var isEqual=collection.Distinct()包含(“”)?collection.Distinct().Count()如果在数组中传递字符串

var collection = new string[] { "India", "", "India", "India" };
var isEqual = collection.Distinct().Contains("") ? collection.Distinct().Count() <= 2 : collection.Distinct().Count() == 1;
var collection=newstring[]{“India”、“”、“India”、“India”};
var isEqual=collection.Distinct()包含(“”)?collection.Distinct().Count()尝试以下操作:

    static void Main(string[] args)
    {
        var text1 = new[] { "x", "y", "z", "w" };
        var text2 = new[] { "x", "y", null, "" };
        var text3 = new[] { "x", "x", "x", "x" };
        var text4 = new[] { "x", "x", null, "" };

        MyComparer(text1); // False
        MyComparer(text2); // False
        MyComparer(text3); // True
        MyComparer(text4); // True
    }

    private static bool MyComparer(IEnumerable<string> array)
    {
        return array.Where(t => !string.IsNullOrEmpty(t)).Distinct().Count() == 1;
    }
static void Main(字符串[]args)
{
var text1=新[]{“x”、“y”、“z”、“w”};
var text2=new[]{“x”,“y”,null,“};
var text3=新[]{“x”、“x”、“x”、“x”};
var text4=new[]{“x”,“x”,null,“};
MyComparer(text1);//错误
MyComparer(text2);//错误
MyComparer(text3);//正确
MyComparer(text4);//正确
}
专用静态布尔MyComparer(IEnumerable数组)
{
返回数组。其中(t=>!string.IsNullOrEmpty(t)).Distinct().Count()==1;
}
试试这个:

    static void Main(string[] args)
    {
        var text1 = new[] { "x", "y", "z", "w" };
        var text2 = new[] { "x", "y", null, "" };
        var text3 = new[] { "x", "x", "x", "x" };
        var text4 = new[] { "x", "x", null, "" };

        MyComparer(text1); // False
        MyComparer(text2); // False
        MyComparer(text3); // True
        MyComparer(text4); // True
    }

    private static bool MyComparer(IEnumerable<string> array)
    {
        return array.Where(t => !string.IsNullOrEmpty(t)).Distinct().Count() == 1;
    }
static void Main(字符串[]args)
{
var text1=新[]{“x”、“y”、“z”、“w”};
var text2=new[]{“x”,“y”,null,“};
var text3=新[]{“x”、“x”、“x”、“x”};
var text4=new[]{“x”,“x”,null,“};
MyComparer(text1);//错误
MyComparer(text2);//错误
MyComparer(text3);//正确
MyComparer(text4);//正确
}
专用静态布尔MyComparer(IEnumerable数组)
{
返回数组。其中(t=>!string.IsNullOrEmpty(t)).Distinct().Count()==1;
}


比较4个字符串:如何比较?为了排列它们,或者看看它们是否相等?你能把a展开吗?但是关于你想做的事情?那么四个都必须相等吗?或者它们必须成对相等吗?此外,至少有一个项目是空的还是非空的?@Kimos您肯定需要将它们放入数组中,然后这个答案将帮助您。字符串应该是相等的。但是如果它们都是空的,那么methode也必须返回true,因为所有空字符串都等于4个字符串:how?为了排列它们,或者看看它们是否相等?你能把a展开吗?但是关于你想做的事情?那么四个都必须相等吗?或者它们必须成对相等吗?此外,至少有一个项目是空的还是非空的?@Kimos您肯定需要将它们放入数组中,然后这个答案将帮助您。字符串应该是相等的。但是如果它们都是空的,那么methode也必须返回true,因为所有空字符串都是相等的问题不清楚,但我从示例中了解到,我们搜索“任意2个字符串”是否相等,而不是“所有”是否相等(意思是
strings.Distinct().Count()
)查询是否正确,如果我们有相同的字符串,
count
将是1。所以我想我不理解这个问题问题问题不清楚,但我从示例中了解到,我们搜索“任意2个字符串”是否相等,而不是“全部”是否相等(意思是
strings.Distinct().count()
)查询是正确的,如果我们有相同的字符串,
count
将是1。所以我想我不理解这个问题。如果所有字符串都为空,这将导致false,这是不正确的谢谢@Kimos。现在,即使所有字符串都为空,代码也会返回true。如果所有字符串都为空,则会导致false,这是不正确的。谢谢@Kimos。现在,即使所有字符串都为EmptyIDNT work,代码也会返回true,当数组包含一个空字符串而其他字符串为空时,我将返回falseequal@Kimos发布不起作用的代码,我应该能够解释你做错了什么。如果您查看我上面给出的第一个使用示例,您可以看到当数组包含一个空字符串而其他字符串相等时,它返回true。我发布的代码确实有效。不起作用,当数组包含一个空字符串而其他字符串为空时,我将得到falseequal@Kimos发布不起作用的代码,我应该能够解释你做错了什么。如果您查看我上面给出的第一个使用示例,您可以看到当数组包含一个空字符串而其他字符串相等时,它返回true。我发布的代码绝对有效。var text5=new[]{“,”,“,”};返回false,应该为true所有空字符串都是euqal…我不认为问题表明它应该返回true或false。如果是,则应这样描述。var text5=new[]{“,”,“,”};返回false,应该为true所有空字符串都是euqal…我不认为问题表明它应该返回true或false。如果是这样,应该这样描述。您可以使用单个循环检查数组中每个成员的相等性。不需要第二个
foreach
:它只是做额外的工作。您可以使用单个循环检查数组中每个成员的相等性。没有必要为每个人设置第二个
:它只是做额外的工作