我的类需要附加信息才能正确输出其状态,因此我添加了一个自定义 PrintSelf 方法,该方法采用适当的参数。
但是,恐怕我的大项目中仍然存在对ToString的调用,没有被新方法取代。如何找到对 ToString 的不正确调用?
我正在使用 VS 2015,但它似乎没有这种能力。
在 ToString 中抛出异常是一种显而易见的方式,但我不想这样做有两个原因:
ToString 仍然可以执行不同的工作并输出一些不依赖于添加的参数的东西。
没有办法获得完整的代码覆盖率,这意味着它只会找到一些隐式调用的实例,而不是(可靠地)所有这些实例。
要覆盖 ToString 并记录调用者,您可以这样做
public override string ToString()
{
StackTrace stackTrace = new StackTrace();
StackFrame[] stackFrames = stackTrace.GetFrames();
StackFrame callingFrame = stackFrames[1];
MethodInfo method = callingFrame.GetMethod();
YourLogingMethod(method.DeclaringType.Name + "." + method.Name);
return base.ToString();
}
Run Code Online (Sandbox Code Playgroud)