症状
<script type="text/javascript">loadTOCNode(1, 'symptoms');</script>
当您编译 Visual C# .NET 控制台应用程序时,可能会收到下面的错误信息:
error CS1502: The best overloaded method match for 'declaration' has some invalid arguments(错误 CS1502:与“declaration”最匹配的重载方法具有一些无效参数)
备注: CS1502 错误信息总是与 CS1503 错误信息一起出现:
error CS1503: Argument 'arg': cannot convert from 'type1' to 'type2'(错误 CS1503:参数“arg”:无法从“type1”转换为“type2”)
原因
<script type="text/javascript">loadTOCNode(1, 'cause');</script>
传递给函数的参数类型与该函数的参数类型不匹配。 如果被调用的函数被重载,则没有一个重载版本的签名与所传递的参数类型匹配。
解决方案
<script type="text/javascript">loadTOCNode(1, 'resolution');</script>
若要解决此问题,请执行以下任一操作:
• | 仔细检查所传递的参数的类型,以确保该类型与所调用的函数的参数相匹配。 更正任何可能造成该问题的编码错误。 |
• | 如果适合,可使用 System.Convert 类转换任何不匹配的参数。 |
• | 如果适合,可强制转换任何不匹配的参数类型,以便与函数所需的类型相匹配。 |
• | 如果适合,可定义函数的另一重载版本,以便与所发送的参数类型相匹配。 |
状态
<script type="text/javascript">loadTOCNode(1, 'status');</script>
这种现象是设计使然。
更多信息
<script type="text/javascript">loadTOCNode(1, 'moreinformation');</script>
在下面的示例 Visual C# .NET 控制台应用程序中,
Test 函数有两个重载版本。 第一个版本仅使用一个
int 类型。 第二个版本需要
int 类型作为其第一个参数,一个
string 类型作为其第二个参数。 但是,在
Main 函数中,所传递的第一个参数 (
nNum) 是
string 类型。 这两个重载的
Test 函数都没有将
string 类型作为第一个参数。
using System;
namespace x
{
public class CTest
{
public static void Test(int n1) {}
public static void Test(int n1, string str){}
public static void Main()
{
string nNum = "1000";
CTest.Test(nNum, "string2"); //CS1502
}
}
}
纠正此错误的一种方法是将 nNum 声明为一个整数,如下所示:
int nNum = 1000;
另一种方法是,在调用 Test 函数之前,将字符串转换为整数。 下面的代码可纠正编译器错误并生成所需的结果:
string nNum = "1000";
int nNumConverted = System.Convert.ToInt32(nNum, 10);
CTest.Test(nNumConverted, "string2");//CS1502