Как передать дополнительные параметры методу в C#?

Как передать дополнительные параметры методу в 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

Как достигнуть этого?

9
задан abatishchev 25 September 2012 в 23:41
поделиться

11 ответов

Используйте атрибут 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) .. 
}
12
ответ дан 4 December 2019 в 06:55
поделиться

Создать другой метод, который вызывает первый?

public void SendCommand(String command)
{
    SendCommand(command, null);
}
0
ответ дан 4 December 2019 в 06:55
поделиться

Вы можете сделать это несколькими способами. Если вы используете .NET 4.0, вы можете использовать в методе необязательные параметры:

public void SendCommand(String command,string strfilename = null)
{
    ....
}

В противном случае вы можете просто создать другой метод, который вызывает уже имеющийся у вас метод, но передает параметры по умолчанию, которые вы хотите сделать необязательными:

public void SendCommand(String command)
{
    SendCommand(command,null);
}
0
ответ дан 4 December 2019 в 06:55
поделиться

Перегрузите функцию. вместо проверки условного перехода. Примерно так:

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

}
0
ответ дан 4 December 2019 в 06:55
поделиться

Проверьте Дополнительные параметры 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
} 
1
ответ дан 4 December 2019 в 06:55
поделиться

До .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);

по-прежнему используется единственный параметр, который является конкатенацией двух строк.

15
ответ дан 4 December 2019 в 06:55
поделиться

Есть три простых решения:

  1. Перегрузить метод
  2. Разрешить методу принимать 'null' и обработать соответствующим образом
  3. Использовать .NET 4, который позволяет необязательные параметры
0
ответ дан 4 December 2019 в 06:55
поделиться

Дополнительные параметры доступны в C # 4.0 , здесь ссылка. В противном случае вам придется писать перегруженную функцию.

0
ответ дан 4 December 2019 в 06:55
поделиться

Вы можете использовать ключевое слово 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");
}
0
ответ дан 4 December 2019 в 06:55
поделиться

Все ответы, приведенные на этой странице, являются допустимыми способами принятия необязательных параметров, но во многих случаях это признак того, что ваш метод пытается сделать слишком много.

Во многих случаях вам может быть лучше с помощью следующих однозначных методов ...

public void GetFileListFromServer()
{
    //Listing Files from Server.
    //code
}

public void UploadFileToServer(string strfilename)
{
    //Uploading file to Server
    //code
}
0
ответ дан 4 December 2019 в 06:55
поделиться

Очевидным ответом на это должно быть , не делайте этого таким образом .

У вас должен быть отдельный метод для каждой команды или базовый класс команды и отдельный производный класс для каждой команды с методом Execute.

Плохой дизайн - иметь один метод, который обрабатывает все мыслимые команды.

Вы действительно не хотите, чтобы одна Sendcommand () обрабатывала все возможные команды.

4
ответ дан 4 December 2019 в 06:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: