【发布时间】:2013-12-10 10:36:37
【问题描述】:
我有类似下面的方法:
public string Method(string s)
{
Console.WriteLine("Called Method(string s)");
return s;
}
public string Method(object o)
{
Console.WriteLine("Called Method(object o)");
return Method(o == null ? null : o.ToString());
}
Resharper 说第一种方法
方法“方法”可以设为私有
我认为这是不正确的,因为如果我打电话:
Method(new SomeClass())
那么输出就是
被调用的方法(对象o)
调用方法(字符串 s)
如果我打电话
Method("some string")
输出是
被调用的方法(字符串 s)
那么,为什么 Resharper 会建议这种看似不正确的重构呢?
【问题讨论】:
-
resharper 根据您现有的代码提出建议,因此如果您在声明类之外没有使用
Method(string s),您将得到这样的建议 -
在使用 null 调用 Method(object o) 时会进入循环。我建议你写一些类似 'return o == null 的东西? string.Empty : Method(o.ToString());'.
-
@wonko79 实际上编译器会为输入选择最具体的重载。在
null的情况下,编译器将选择string重载而不是object重载,因为string可以是null。