为什么当char数据等于对象数据时,equals()的计算结果为false

本文关键字:数据 equals 结果 false 计算 对象 char 于对象 为什么 | 更新日期: 2023-09-27 18:15:00

考虑以下代码片段:

char ch = '[';
string d = "[";
Console.WriteLine(ch.Equals(d))

输出将是false

当你想要它是true时你该怎么做?

编辑:

变量d在示例中是一个字符串,但在实践中它可以是任何对象…

为什么当char数据等于对象数据时,equals()的计算结果为false

使用ToString();

var result = '['.ToString().Equals("[");

如果你想让它是真的,你会怎么做?

使用ch.ToStringchar ch转换为字符串

Console.WriteLine(ch.ToString().Equals(d));

或使用Convert.ToChar

将字符串转换为char
Console.WriteLine(ch.Equals(Convert.ToChar(d)));

但是如果字符串包含多个字符,上述操作将失败。

编辑:

变量d在示例中是一个字符串,但实际上它可以是任何字符串对象…

那么最好使用Convert.ToChar(object)方法将对象转换为字符,然后比较是否相等。

string d = "[";
char ch = '[';
object o = (object)d;
Console.WriteLine(ch.Equals(Convert.ToChar(o)));

如果object不能转换为char,上面可能会抛出异常,为了安全起见,您可以使用char.TryParse,如:

string d = "[";
char ch = '[';
object obj = (object)d;
char temp;
bool result = obj != null && 
              char.TryParse(obj.ToString(), out temp) && 
              ch == temp; //same as ch.Equals(temp);

如果转换为字符不成功,则返回false。

这取决于你的意图。这

Console.WriteLine(ch.Equals(d[0]));

Console.WriteLine(ch.ToString().Equals(d));

如果d可以是任何对象(就像你添加的),你也可以尝试使用d.ToString()。但是将char与滑块进行比较有什么意义呢?根据对象的实际类型,比较可能意外地变为True。

一般来说:

char ch = '[';
string d = "[";
bool areEqual = (d != null) && (d.Length == 1) && (d[0].Equals(ch));

假设您不希望在null或"[XXX"与'['进行比较时它为真。