gpt4 book ai didi

c# - 如何通过接口(interface)方法使用 CallerMemberName

转载 作者:行者123 更新时间:2023-12-04 13:17:59 26 4
gpt4 key购买 nike

我正在浏览大约 700K 行代码。大量的接口(interface)实现和DI使用。我试图找出从哪里调用特定方法,因此我尝试使用 [CallerMemberName]

我在谷歌等上看到的所有例子都是这样的:

public void TraceMessage(string message,
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
[System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)

使用可选参数获取信息的地方。我的问题是这个方法是接口(interface)实现的一部分。因此,当我更改方法签名时,编译器会对我大喊大叫。

任何关于如何使接口(interface)方法与 [CallerMembername] 配合使用的建议将不胜感激。

最佳答案

有一个类似的问题 - 发现我可以将 CallerMemberName 添加到接口(interface)方法,如下所示。它确实会更改实现类的签名,但不会更改调用代码的签名 - 如果这有意义的话!

如果这是接口(interface)中方法的当前签名

void TraceMessage(string message);

修改如下

void TraceMessage(string message,
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
[System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0);

更新实现接口(interface)的类中的方法

public void TraceMessage(string message,
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
[System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
// Log the params
}

这仍然可以仅使用“消息”参数使用原始签名调用,其他参数仍将被拾取,因此无需重构所有调用代码

TraceMessage("Testing");

(为简洁起见添加)

using System.Runtime.CompilerServices;

关于c# - 如何通过接口(interface)方法使用 CallerMemberName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58020355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com