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,则必须修剪空白区域以使其具有可比性且相同时间,然后无法修剪。
在完成所有可能的条件后,我编写了这段代码,并且仍然相信有人可以在效率方面提高效率。
谢谢!
答案 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)
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执行null
和whitespace
检查(两个条件都将被视为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的嵌套可能会让调试变得有点烦人。
希望这能为您提供所需的功能和效率。