C#:具有相同名称和不同签名的多个函数,但编译器调用错误的函数.怎么解决?

Sip*_*ipo 3 c# function

我有两个功能:

partial class Database
{
    public void Insert(string table, params string[] values)
    {
        string query = "INSERT INTO [{0}] VALUES ('{1}')";
        ExecuteNonQuery(string.Format(query, table, string.Join("','", values)));
    }

    public string Insert(string table, string returnedColumn, params string[] values)
    {
        string query = "INSERT INTO [{0}] OUTPUT INSERTED.{1} VALUES ('{2}')";
        return ExecuteScalar(string.Format(query, table, returnedColumn, string.Join("','", values))).ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

它们都INSERT在数据库中的表上执行.不同之处在于,第一个只将数据插入数据库,第二个也使用OUTPUTSQL中的关键字从插入行中的一个列返回一个值.

问题是当我试图调用第一个函数时,编译器会调用第二个函数.所以,例如,如果我有这个代码:

Database DB = new Database();
DB.Insert("tableName", "some data");
Run Code Online (Sandbox Code Playgroud)

Visual Studio实际上将其视为我调用第二个函数: 在此输入图像描述

有什么问题,如何解决?谢谢.

Lee*_*Lee 5

您可以将第二个参数包装在一个数组中,这将强制您想要选择的重载:

DB.Insert("tableName", new[] { "some data" });
Run Code Online (Sandbox Code Playgroud)