我有这样的情况:
public static SqlDataReader ReadFromDB(string inputSQLStatement)
{
//Does some actual work here ..
}
public static DataTable ReadFromDB(string inputSQLStatement)
{
return new DataTable().Load(ReadFromDB(inputSQLStatement));
}
基本上第二个函数试图调用与调用函数同名的另一个函数,但是具有不同的返回类型..
但是使用上面的代码,我在第二个函数的返回行上得到以下错误:
The call is ambiguous between the following methods or properties ...
我想也许编译器可以弄清楚从第二个函数返回到一个带有SqlDataReader对象的函数,所以它知道它必须调用ReadFromDB()的版本,但我想我需要明确指定要显式调用的版本..
那我怎么解决这个问题呢?
编辑:
没关系,我找到了答案。 C#中不支持按返回类型重载函数:http://msdn.microsoft.com/en-us/library/aa691131(v=vs.71).aspx
答案 0 :(得分:2)
不支持按返回类型重载,因为方法的正式签名不包括返回类型,只包含方法的名称和参数的类型(感谢CAbbot)。有关详细信息,请参阅here 在这种情况下,您需要以不同方式命名方法,例如:
public static SqlDataReader ReadFromDB(string inputSQLStatement)
{
//Does some actual work here ..
}
public static DataTable ReadDataTableFromDB(string inputSQLStatement)
{
return new DataTable().Load(ReadFromDB(inputSQLStatement));
}
答案 1 :(得分:0)
方法签名的名称,参数长度是唯一的,如果长度相同,那么它们的类型(当使用params时,还有另一种情况)。这个想法是方法的返回不计入方法签名。
因此,您可以重命名该方法:
ReadFromDBIntoTable
答案 2 :(得分:0)
返回值不属于签名。您可以为方法指定不同的名称,例如ReadDataTableFromDB
,或将它们移动到您明确实现的接口。