比较两个对象是string和is equal

本文关键字:string is equal 对象 两个 比较 | 更新日期: 2023-09-27 18:13:09

valuesobject数组。我需要检查第三和第四个元素是否为字符串。如果是这样,我需要检查它们是否相等。

我是这样做的:

if ( values[2] is string && 
     values[3] is string && 
     ((values[2] as string) == (values[3] as string)))
{
    return false;
}

是否有更简单或更短的方法来做到这一点?

比较两个对象是string和is equal

我认为string.Equals(object)方法在这里是最简单的。

 result = string.Equals(value[2], value[3]);

From MSDN

返回true,如果obj是一个String对象并且它的值与本实例相同;否则,假的。如果obj为null,该方法返回false。

我是这样做的:

return values[2] is string && values[2].Equals(values[3]);

只要知道两个对象中有一个是字符串就足够了。如果它等于另一个对象,则保证另一个对象也是字符串。

另外,请注意使用Equals()而不是==来保证字符串内容的比较,而不是对象引用。

您只需要检查其中一个是否为字符串,因为您正在检查它们是否相等。如果它们相等且其中一个是字符串,则两个都是。

return (values[2] is string) && (values[2] == values[3]);

if语句检查对象是否与给定类型兼容。为例如,下面的代码可以确定对象是否是实例MyObject类型的,或者从MyObject派生的类型:

  if (obj is MyObject)
  {}

如果是这种情况,使用更清晰的代码(c#编译器会考虑效率)

使用:

 Object.Equals(a, b)

会检查字符串内容是否相等,而不是检查引用(因为字符串是不可变的,所以不能有两个)引用相同内存的字符串对象,如果我错了,请纠正)。它调用String的"底层"。= =因为= =是虚的

这是一种比较字符串的非常模糊的方法,我承认,它更清晰,在相同的价格

从这些例子中使用。net String.Compare方法:1,2

 return String.Compare(values[2], values[3], true) == 0;

添加到前面的答案

return value[2] != null && value[2] is string && value[2].Equals(value[3]);

来自eric lippert post: http://blog.coverity.com/2014/01/13/inconsistent-equality/#.Vfp63d-qqko

在场景三中,我们必须首先解决一个重载解析问题,以确定Equals的含义。接收器的类型是int,它有三个方法,名为Equals:

Equals(object, object) // static method from object
Equals(object)         // virtual method from object
Equals(int)            // Implements IEquatable<int>.Equals(int)

第一个我们可以排除,因为没有足够的参数。在其他两种方法中,唯一的最佳方法是接受int类型的方法;将短实参转换为int总是比转换为object更好。因此,我们调用Equals(int),然后使用值相等再次比较两个整数,因此这是正确的。

从MSDN

IEquatable。=方法(T)指示当前对象是否等于另一个相同类型的对象。