c# - 当当前函数具有相同名称但不同签名时,如何在当前函数中调用另一个函数?

标签 c# overloading

我遇到这样的情况:

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

最佳答案

不支持按返回类型重载,因为方法的正式签名不包括返回类型,而仅包括方法名称和参数类型(感谢 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));
}

关于c# - 当当前函数具有相同名称但不同签名时,如何在当前函数中调用另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9890543/

相关文章:

c# - 从具有重复 XmlElementAttribute 名称的 XML 中恢复对象

c# - 用一个无限的序列压缩,这个序列是真的然后总是假的

c++ - 如何调用 'call by value '和 'call by reference'重载函数?

c++ - 运算符重载(相同的参数,不同的返回类型)

c++ - 将 std 字符串访问器与 ostream 运算符 << 一起使用

c++ - 嵌套模板函数的重载

c# - 正确分配命名空间(根据 ReSharper 的建议)

c# - Linq 选择 : Using a value from a list if available

c# - 如何使用c#在参数中传递转换表达式?

java - 在 Java 中重载/覆盖