如何自动识别对函数的特定调用?
这个例子被简化了,我有(有点)比这个例子更好的理由想要这个。
如果我的代码如下所示:
...
myObj.method1("locationA", otherParams);
...
myObj.method1("locationB", unrelatedParams);
...
我想知道如何自动生成用于代替“locationA”和“locationB”的标识符,以便我可以知道哪一行代码正在执行调用。
硬编码每个位置的标识符不是一种选择,例如,它不能是递增的数字。它必须是每次为相同的函数调用生成的相同标识符。
我的想法是我们也许可以使用反射(尽管我不知道是否可以使用 IL 行号之类的东西),但我愿意接受有关如何执行此操作的任何其他想法,只要它符合以上条件。
谢谢你的帮助。
更多信息:
询问者是我的同事,提供的答案似乎解决了这个问题,但如果有更好的选择,我会提供一些额外的信息。我们想要识别特定位置的原因是我们在服务器端代码 (c#) 和客户端代码 (JavaScript) 之间进行提示(向用户发送消息以与之交互)。如果我们有一系列基于应用程序状态的提示,比如说,如果数据库中的某些内容被锁定并询问用户要做什么(例如取消),则会出现第一个提示,然后会出现第二个提示。我们需要在移动到第二个之前处理第一个,所以我们退出服务器代码并返回第一个提示。
当我们对提示进行编码时,我们会为其动态分配一个 ID(在这种情况下,当前自动递增一个 ID,以避免硬编码(即 1、2、3 或 guid 等)。每次调用时,此动态标识都会重置有问题的方法(以便 ID 保持一致;第一个提示的 id 为“1”,第二个提示的 id 为“2”)。
这个想法是,当用户回答和重试时,我们将答案分配给一个列表并调用操作,然后将列表中的提示答案与位于代码中的特定提示相匹配。然后我们继续下一个提示,然后重复相同的过程。
但是,如果当我们回到带有两个提示的方法时,并且锁不再存在(第一个提示),我们不会分支到代码的那部分(在提示之前检查锁)。因此,我们跳到第二个提示,但是第二个提示会自动生成一个 ID 1,而不是 2,并认为它已经有答案,但实际上没有。
我突出显示了创建 ID 的代码,并查看是否有与提示 ID 匹配的答案(答案列表存储在 中PromptHandler
):