【发布时间】:2011-12-07 08:54:46
【问题描述】:
请帮忙!
我做错了什么?
static void f1(Color color, params float[] f)
{
System.Console.WriteLine("Here is f1 for float");
}
static void f1(Color color, params int[] f)
{
System.Console.WriteLine("Here is f1 for int");
}
static void Main()
{
f1(null,0);
}
我无法调用f1(null,0); 我得到编译时错误。
假设我确实需要这些方法签名,如何克服这些人员?
编辑:至于 Compile-tme 错误 - ReSharper 抱怨:
无法解析方法 f1(null,int),候选为:
void f1(Syste.Drawing.Color, params[] float)
void f1(Syste.Drawing.Color, params[] int)
【问题讨论】:
-
您可以尝试将
0显式转换为int或float,但我刚刚在测试程序中尝试了您的代码,它编译得很好。这是因为0被假定为一个 32 位整数,所以调用了两个方法中的第二个。你能发布你得到的编译错误,以便我们获得更多信息吗? 编辑:参考@meziantou 的回答 - 这可能就是您要找的。span> -
@Yochai Timmer:很遗憾你不能对评论投反对票。首先,这不会回答问题。其次,
params是一种语法糖,它隐式地将逗号分隔的值列表(数量可能是 0...n)转换为数组,因此 Michael Z 的代码在这方面完全有效。在回答之前了解语言的详细信息。 -
@TomW 你是对的。在这篇文章之后我已经调查过了。忘记删除评论了。
标签: c# params overloading