比较2个字符串为NULL或值的有效方法和修剪比较,如果它在C#中不是NULL

时间:2016-03-18 17:34:56

标签: c# string

static void Main(string[] args)
    {
        string string1 = "  "; // it can be NULL and any word too
        string string2 = null; // it can be NULL and any word too

        if (string.IsNullOrEmpty(string1))
        {
            if (string.IsNullOrEmpty(string2))
            {
                Console.WriteLine("Both the string Null & equal");
            }
        }
        else
        {
            if (!string.IsNullOrEmpty(string2))
            {
               if(string1.Trim().Equals(string2.Trim(),StringComparison.OrdinalIgnoreCase))
                {
                    Console.WriteLine("Both the string has value& equal");
                }
            }
        }
    }

此代码检查两个字符串的NULL或值,最终确认字符串是否相同。 重要的是,如果字符串为NULL,则必须修剪空白区域以使其具有可比性且相同时间,然后无法修剪。

在完成所有可能的条件后,我编写了这段代码,并且仍然相信有人可以在效率方面提高效率。

谢谢!

5 个答案:

答案 0 :(得分:1)

假设您确实要检查null而不是null或为空(根据您的控制台注释),我将实现以下方法...

private bool checkEqualityWithTrim(string string1, string string2)
{
    bool bothNull = string1 == null && string2 == null;
    bool bothNonNullAndEqualTrimmed = string1 != null && string2 != null && string1.Trim() == string2.Trim();

    return bothNull || bothNonNullAndEqualTrimmed;
}

然后你就可以......

var areEqual = checkEqualityWithTrim(string1, string2);

如果IsNullOrEmpty()是故意的,那么只需用

替换bothNull行
bool bothNull = string.IsNullOrEmpty(string1) && string.IsNullOrEmpty(string2);

答案 1 :(得分:0)

是的,你做的比你需要做的更多。如果字符串相等,则只需要检查其中一个字符串是null还是空格。如果是这样,您就知道两个字符串中的值。这可以假设你为NULL和空格是等价的。

public static void Main(string[] args)
{
    string string1 = ""; // it can be NULL and any word too
    string string2 = ""; // it can be NULL and any word too

    if (String.Equals((string1 ?? "").Trim(), (string2 ?? "").Trim(),StringComparison.OrdinalIgnoreCase))
    {
        if (string.IsNullOrEmpty(string1)) //since the strings are equal, check one of the strings
        {
            Console.WriteLine("Both strings are null or empty & equal");
        }
        else
        {
            Console.WriteLine("Both strings have values & are equal");
        }
    }
}

答案 2 :(得分:0)

您正在寻找简单且可维护的代码而不是效率......

我会这样编码:

(编辑:现在有所有可能的条件)

{

        String string1 = "";
        String string2 = "";

        if (String.IsNullOrEmpty(string1.Trim()) && String.IsNullOrEmpty(string2.Trim()))
        {
            Console.WriteLine("Both the string Null & equal");
        }
        else if (!String.IsNullOrEmpty(string1.Trim()) && String.IsNullOrEmpty(string2.Trim()))
        {
            Console.WriteLine("String2 is null and string1 is not!");
        }

        else if (String.IsNullOrEmpty(string1.Trim()) && !String.IsNullOrEmpty(string2.Trim()))
        {
            Console.WriteLine("String1 is null and string2 is not!");
        }
        else {

            if (string1.Trim().Equals( string2.Trim())) {
                Console.WriteLine("both strings are not null and Equals!");
            }
            else {
                Console.WriteLine("both strings are not null! and not Equals");
            }  
        }
    }

答案 3 :(得分:0)

如果您可以使用C#6我肯定会建议您使用the Null Conditional Operator(也称为Elvis运营商):

var test = "";
var test2 = "";

if (String.IsNullOrEmpty(test?.Trim()) && String.IsNullOrEmpty(test2?.Trim()))
{
    Console.WriteLine("both strings are null or empty and equal");
}
else
{
    Console.WriteLine("both strings have value and are equal");
}

同样取决于字符串" "(空格)对您的意义(空或值)使用IsNullOrEmpty(在值的情况下)或IsNullOrWhitespace(在空的情况下) )。

答案 4 :(得分:0)

这是我对你的尝试。

如果这是将要使用的东西,那么可能使用扩展方法可能是要走的路。

我为您创建了两种扩展方法。

1执行nullwhitespace检查(两个条件都将被视为null

第二个执行你所追求的逻辑。

以下是我对你的尝试:

 public static bool IsNull(this string source)
            {
                return string.IsNullOrWhiteSpace(source);
            }

 public static string IsNullOrSame(this string source, string comparer)
        {
            //check for both values are null 
            if (source.IsNull() && comparer.IsNull())
            {
                return "Both Values Null or contain whitespace only";
            }

            //check if string 1 is null and string two has a value.
            if (source.IsNull() && !comparer.IsNull())
            {
                return "I don't have a Value, but string 2 does";
            }

            //check if string 1 has a value and string two is null 
            if (!source.IsNull() && comparer.IsNull())
            {
                return "I have Value, but string 2 doesn't";
            }

            //if we make it this far then both have a value,  check if the string value matches
            if(source.Trim().Equals(comparer.Trim(), StringComparison.OrdinalIgnoreCase))
            {
                return "Both value match"; 
            }

            //if values don't match
            return "strings both have values but don't match";
        }

将这些扩展方法包含到项目中后,您可以执行以下操作:

var string1 = "some value"; 
var string2 = null;
var result = string1.IsNullOrSame(string2); 
Console.WriteLine(result);

这将导致消息"I have Value, but string 2 doesn't"

多个return语句的原因纯粹是为了便于阅读。如果我们遇到“条件”,则没有必要再执行检查,并且多个if的嵌套可能会让调试变得有点烦人。

希望这能为您提供所需的功能和效率。