比较两个对象是字符串并且是相等的

时间:2015-09-17 04:08:29

标签: c#

values是一个object数组。我需要检查第3和第4个元素是否为字符串。如果是这种情况,我需要检查它们是否相等。

我是这样做的:

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

有更简单或更短的方法吗?

6 个答案:

答案 0 :(得分:2)

这是我将如何做到的:

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

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

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

答案 1 :(得分:2)

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

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

来自MSDN

  如果obj是一个String并且其值与此实例相同,则

返回true;否则,错误。如果obj为null,则该方法返回false。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

  if (obj is MyObject)
  {}

如果是这种情况,请使用更清晰的代码(c#编译器将负责效率)

使用:

 Object.Equals(a, b)

它检查字符串内容的相等性,而不是 引用(因为字符串是不可变的,实际上不可能有两个 引用相同内存的字符串对象,如果我错了,请更正。 它将“引擎盖”称为String.Equals,因为Equals是虚拟的。

这是一种非常模糊的方式来比较字符串,我承认,更糟糕,更清晰,价格相同。

答案 4 :(得分:0)

使用以下示例中的.Net String.Compare方法:12

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

答案 5 :(得分:0)

添加到之前的答案

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

来自eric lipperts帖子: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;将short参数转换为int而不是object更好。因此我们调用Equals(int),然后使用值相等性再次比较两个整数,所以这是真的。

  

来自MSDN

  
    

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