Как установить, какие из входов функций требуются, а какие нет (C #) - PullRequest
0 голосов
/ 24 апреля 2010

Так у меня есть функция

public int Sum(var valueA, var valueB, var valueC) { 
  var summ = valueA + valueB; 
  return summ; 
} 

Я хочу добавить к сумме значение C, если оно было задано. И пусть пользователь не указывает это, если не хочет. Как это сделать?

Ответы [ 3 ]

4 голосов
/ 24 апреля 2010

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

3 голосов
/ 24 апреля 2010

Если вы используете .NET 3.5 или более раннюю версию, вы можете использовать Обнуляемые типы .

public int Sum(int valueA, int valueB, int? valueC)
{
    int sum = valueA + valueB;
    if (valueC.HasValue)
    {
        sum += valueC.Value;
    }

    return sum;
}

Звонки будут:

int answer1 = Sum(1, 2, 3); // = 6

int answer2 = Sum(1, 2, null); // = 3

Конечно, классический способ сделать это - использовать перегрузки метода:

public int Sum(int valueA, int valueB)
{
    int sum = valueA + valueB;
    return sum;
}

public int Sum(int valueA, int valueB, int valueC)
{
    int sum = valueA + valueB + valueC;
    return sum;
}

int answer1 = Sum(1, 2);
int answer2 = Sum(1, 2, 3);

Если вы хотите использовать string, а также int, либо перейдите на .NET4, либо создайте другую пару перегруженных методов:

public int Sum(string valueA, string valueB)
{
    // Convert the strings to int and call the previous code
    // You will need to cope with the case when the strings don't represent numbers
}

public int Sum(string valueA, string valueB, string valueC)
{
    ...
}

Если вы хотите справиться со смешанными string и int, вам понадобится еще больше перегрузок - что, вероятно, излишне.

1 голос
/ 24 апреля 2010

В дополнение к опциям, предоставленным Шейном Фулмером, вы также можете использовать ключевое слово params, чтобы иметь функцию, которая принимает переменное число параметров:

public int Sum(params int[] values)
{
    int sum = 0;
    for(int i = 0; i < values.Length; i++){
        sum+=values[i];
    }
    return sum;
}

int answer2Parameters = Sum(1, 5);
int answer3Parameters = Sum(1, 2, 3);
int answer4Parameters = Sum(1, 3, 5, 6);

Конечно, если вы хотите ограничить их ровно двумя или тремя, вы, вероятно, захотите посмотреть на необязательные параметры в C # 4.0 или перегрузить функцию Sum - под этим я подразумеваю создание двух функций Sum, одна из которых принимает два параметра и другой, который принимает 3 параметра.

public int Sum(int valueA, int valueB) { 
  int summ = valueA + valueB; 
  return summ; 
} 

public int Sum(int valueA, int valueB, int valueC) { 
  int summ = valueA + valueB + valueC; 
  return summ; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...