比较两个对象是string和is equal
本文关键字:string is equal 对象 两个 比较 | 更新日期: 2023-09-27 18:13:09
values
为object
数组。我需要检查第三和第四个元素是否为字符串。如果是这样,我需要检查它们是否相等。
我是这样做的:
if ( values[2] is string &&
values[3] is string &&
((values[2] as string) == (values[3] as string)))
{
return false;
}
是否有更简单或更短的方法来做到这一点?
我认为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)
从MSDN第一个我们可以排除,因为没有足够的参数。在其他两种方法中,唯一的最佳方法是接受int类型的方法;将短实参转换为int总是比转换为object更好。因此,我们调用Equals(int),然后使用值相等再次比较两个整数,因此这是正确的。
IEquatable。=方法(T)指示当前对象是否等于另一个相同类型的对象。