Как передать дополнительные параметры методу в C#?
Предположим, что я создал один метод под названием Sendcommand
public void SendCommand(String command,string strfilename)
{
if (command == "NLST *" ) //Listing Files from Server.
{
//code
}
else if (command == "STOR " + Path.GetFileName(uploadfilename)) //Uploading file to Server
{
//code
}
else if ...
}
Теперь я хочу назвать этот метод в основном методе как
Sendcommand("STOR ", filename);
Sendcommand("LIST"); // In this case i dont want to pass the second parameter
Как достигнуть этого?
Используйте атрибут params:
public void SendCommand(String command, params string[] strfilename)
{
}
, тогда вы можете назвать его так:
SendCommand("cmd");
SendCommand("cmd", "a");
SendCommand("cmd", "b");
или, если вы используете C # 4.0, вы можете использовать новую функцию дополнительных аргументов:
public void SendCommand(String command, string strfilename=null)
{
if (strfilename!=null) ..
}
Создать другой метод, который вызывает первый?
public void SendCommand(String command)
{
SendCommand(command, null);
}
Вы можете сделать это несколькими способами. Если вы используете .NET 4.0, вы можете использовать в методе необязательные параметры:
public void SendCommand(String command,string strfilename = null)
{
....
}
В противном случае вы можете просто создать другой метод, который вызывает уже имеющийся у вас метод, но передает параметры по умолчанию, которые вы хотите сделать необязательными:
public void SendCommand(String command)
{
SendCommand(command,null);
}
Перегрузите функцию. вместо проверки условного перехода. Примерно так:
public void SendCommand(String command,string strfilename)
{
if (command == "STOR " +
Path.GetFileName(uploadfilename)) //Uploading file to Server
{
//code
}
else if ............
}
public void SendCommand(String command)
{
//code
}
Проверьте Дополнительные параметры C # 4.0 .
Также убедитесь, что вы используете .NET 4.
Если вам нужно использовать более старые версии .NET.
Перегрузка метода - это решение:
public void SendCommand(String command)
{
SendCommand(command, null);
// or SendCommand(command, String.Empty);
}
public void SendCommand(String command, String fileName)
{
// your code here
}
До .NET 4 вам нужно перегрузить метод:
public void sendCommand(String command)
{
sendCommand(command, null);
}
.NET 4 вводит поддержку параметров по умолчанию, которые позволяют сделать все это в одной строке.
public void SendCommand(String command, string strfilename = null)
{
//method body as in question
}
Кстати, в вопросе, как вы его написали, вы не вызываете метод и в первом примере:
Sendcommand("STOR " + filename);
по-прежнему используется единственный параметр, который является конкатенацией двух строк.
Есть три простых решения:
Дополнительные параметры доступны в C # 4.0 , здесь ссылка. В противном случае вам придется писать перегруженную функцию.
Вы можете использовать ключевое слово params :
private static void SendCommand(String command, params string[] filenames)
{
if (command == "NLST *" ) //Listing Files from Server.
{
//code
}
if (command == "STOR ")
{
foreach (string fileName in filenames)
{
if (String.IsNullOrWhiteSpace(fileName))
{
// code
}
}
}
}
и вы можете использовать его как :
static void Main(string[] args)
{
SendCommand("NLST *");
SendCommand("STOR ", "myfile1.txt", "myfile.txt");
}
Все ответы, приведенные на этой странице, являются допустимыми способами принятия необязательных параметров, но во многих случаях это признак того, что ваш метод пытается сделать слишком много.
Во многих случаях вам может быть лучше с помощью следующих однозначных методов ...
public void GetFileListFromServer()
{
//Listing Files from Server.
//code
}
public void UploadFileToServer(string strfilename)
{
//Uploading file to Server
//code
}
Очевидным ответом на это должно быть , не делайте этого таким образом .
У вас должен быть отдельный метод для каждой команды или базовый класс команды и отдельный производный класс для каждой команды с методом Execute.
Плохой дизайн - иметь один метод, который обрабатывает все мыслимые команды.
Вы действительно не хотите, чтобы одна Sendcommand ()
обрабатывала все возможные команды.