gpt4 book ai didi

c# - 没有 WriteLine 的重载匹配具有相同签名的委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 17:15:23 24 4
gpt4 key购买 nike

我最近正在编写一些代码来使用 .NET 3.5 中的委托(delegate)来执行 WriteLine。在我遇到 WriteLine 的重载之前,使用各种不同的 Action 委托(delegate)一切顺利

public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3)

因为我使用的是 .NET 3.5,所以没有 Action<T1, T2, T3, T4, T5>委托(delegate)所以我很快写了我自己的:

public delegate void Action<T1, T2, T3, T4, T5>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);

然后我将 WriteLine 分配给此方法 Action<string, object, object, object, object> action = Console.WriteLine;我收到了错误消息

No overload for 'WriteLine' matches delegate 'Action<string,object,object,object,object>'

我认为这一定是由某些泛型问题引起的,所以我明确声明了一个新委托(delegate):

public delegate void WriteLineAction(string format, object arg0, object arg1, object arg2, object arg3);

然后我尝试将 WriteLine 分配给这个新方法并再次收到错误消息:

No overload for 'WriteLine' matches delegate 'WriteLineAction'

更奇怪的是,如果我右键单击错误的 Console.WriteLine 调用并说“转到定义”,它会将我带到元数据中的正确版本的 WriteLine,所以为什么它无法将方法与委托(delegate)相匹配。我在这里做的事情真的很愚蠢还是这是一个已知问题/功能?

最佳答案

如果您查看 docs for this overload它显示:

This API is not CLS-compliant. The CLS-compliant alternative is WriteLine(String, Object[]).

如果您查看签名中的 C# 选项卡,它会显示:

C# does not support methods that use variable length arguments (varargs). The compiler automatically resolves calls to this method to the same method that uses a parameter array.

C++ 选项卡将签名显示为:

public:
static void WriteLine(
String^ format,
Object^ arg0,
Object^ arg1,
Object^ arg2,
Object^ arg3,
...
)

我强烈怀疑这是问题所在。在 Reflector 中它显示为:

public static void WriteLine(string format, object arg0, object arg1,
object arg2, object arg3, __arglist)

关于c# - 没有 WriteLine 的重载匹配具有相同签名的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8077117/

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