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

时间:2013-05-22 09:04:37

标签: c# equality

请考虑以下代码段:

char ch = '[';
string d = "[";

Console.WriteLine(ch.Equals(d))

输出为false

当你想要它true时,你会怎么做?

编辑:

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

4 个答案:

答案 0 :(得分:2)

使用ToString();

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

答案 1 :(得分:2)

  

如果你希望它成真,你会怎么做?

使用char

ch.ToString ch转换为字符串
Console.WriteLine(ch.ToString().Equals(d));

或使用Convert.ToChar

将字符串转换为字符
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。

答案 2 :(得分:0)

这取决于你的意图。这个

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

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

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

答案 3 :(得分:0)

更一般地说:

char ch = '[';
string d = "[";

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

假设您在比较null或“[XXX”与'['。

时不希望它为真。