gia*_*min 20 c# resharper equality
我不明白为什么Resharper建议我在这段代码中"检查引用相等":
if ( typeToTranslate.Equals( typeof(string) ) )
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
为什么这应该更好:
typeToTranslate == typeof(string)
Run Code Online (Sandbox Code Playgroud)
- - - - - - 编辑 - - - - - -
这是方法存根:
protected IType TranslateType(Type typeToTranslate)
{
if (typeToTranslate == null) throw new ArgumentNullException("typeToTranslate");
//do some stuff
if (typeToTranslate.Equals(typeof(string)))
{
//do some stuff
}
//return some stuff
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*Liu 23
Object.Equals是一个更一般的实物比参考平等机会的:如果x == y然后x.Equals(y),但反过来未必是真实的.但是,如MSDN Library中所述:
甲类型表示一种类型的对象是唯一的; 也就是说,当且仅当它们表示相同类型时,两个Type对象引用引用同一对象.这允许使用引用相等性来比较Type对象.
因为ReSharper将"通用实践和代码改进"下的"检查引用相等性"检查选项分类,我的猜测是ReSharper告诉您,使用引用相等性来比较类型就足够了; 你不需要Equals方法隐含的更一般的平等(即使对于类型,两者是等价的).
Stu*_*nge 15
表示类型的Type对象是唯一的; 也就是说,当且仅当它们表示相同类型时,两个Type对象引用引用同一对象.这允许使用引用相等性来比较Type对象.
这意味着,"string".GetType()和typeof(string)返回相同的参考.AppDomain中的System.String只有一个System.Type对象实例.
至于为什么ReSharper说使用"更好" ==代替.Equals()?我的猜测是因为==效率更高,并且没有冒险抛出NullReferenceExceptionif typeToTranslate为null(在你的情况下).