为什么当char数据等于对象数据时,equals()的计算结果为false
本文关键字:数据 equals 结果 false 计算 对象 char 于对象 为什么 | 更新日期: 2023-09-27 18:15:00
考虑以下代码片段:
char ch = '[';
string d = "[";
Console.WriteLine(ch.Equals(d))
输出将是false
。
当你想要它是true
时你该怎么做?
变量d
在示例中是一个字符串,但在实践中它可以是任何对象…
使用ToString();
var result = '['.ToString().Equals("[");
如果你想让它是真的,你会怎么做?
使用ch.ToString
将char
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。
这取决于你的意图。这
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"与'['进行比较时它为真。