无法将来自 COM 对象的字符串与字符串文字进行比较

Can´t compare string from COM-object with string-literal

我有以下代码来比较从数据库读取的值与一些预期值:

object o = row.get_Value(fieldIndex);
bool equal = o == "mytext";

当我调试时 o 的值为 "mytext"。然而,比较结果是 false。另一方面,如果我将 o 转换为 string,比较有效:

bool equal = (string)o == "mytext";

虽然 row 是一个 COM 对象,但 o.GetType() returns string.

很遗憾,我无法提供 get_Value 的功能,因为我没有它的源代码。

那么为什么第二次比较有效而第一次比较无效?

最小的可重现示例是

object o = "mymy";
string s = "my";
Console.WriteLine(o == s+s);

这会给你编译器警告 CS0252,它基本上是说你得到 object 的相等比较而不是 string.

的相等比较

string 改变了 == to that of .Equals() 的含义,它测试一个字符一个字符是否相等。