我怎样才能找出谁在(隐式)调用我的 ToString?

maf*_*afu 5 .net c# tostring

我的类需要附加信息才能正确输出其状态,因此我添加了一个自定义 PrintSelf 方法,该方法采用适当的参数。

但是,恐怕我的大项目中仍然存在对ToString的调用,没有被新方法取代。如何找到对 ToString 的不正确调用?

我正在使用 VS 2015,但它似乎没有这种能力。

在 ToString 中抛出异常是一种显而易见的方式,但我不想这样做有两个原因:

  1. ToString 仍然可以执行不同的工作并输出一些不依赖于添加的参数的东西。

  2. 没有办法获得完整的代码覆盖率,这意味着它只会找到一些隐式调用的实例,而不是(可靠地)所有这些实例。

Tho*_*ins 5

要覆盖 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)