У меня есть две функции:C#: Несколько функций с тем же именем и другой подписью, но компилятор не отвечает. Как это исправить?
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();
}
}
Оба они выполняющиеся в INSERT
на столе в базе данных. Разница в том, что, в то время как первая только вставляет данные в базу данных, вторая также возвращает значение из одного из столбцов во вставленной строке, используя ключевое слово в SQL.
Проблема в том, что когда я пытаюсь вызвать первую функцию, компилятор вызывает вторую. Так, например, если у меня есть этот код:
Database DB = new Database();
DB.Insert("tableName", "some data");
Visual Studio на самом деле относится к нему, как если бы я назвал вторую функцию:
В чем проблема и как я могу решить эту проблему? Благодарю.
'DB.Insert ("TableName", новый [] { "некоторые данные"});' – PetSerAl
Проблема заключается в том, что вы звоните Insert (строка , string), поскольку params является необязательным. Ваш компилятор в основном думает, что он должен выбрать второй, потому что он соответствует более близко. – Blackunknown
Я не уверен, что вы читаете ту же спецификацию C#, что и я, но это правильная перегрузка для вызова. Почему бы и нет? – Luaan