Обнуляемые аргументы метода в C #

Повторяющийся вопрос

Передача нулевых аргументов в методы C #

Могу ли я сделать это на C # для .Net 2.0?

public void myMethod(string astring, int? anint)
{
//some code in which I may have an int to work with
//or I may not...
}

Если нет, могу ли я сделать что-то подобное?


person Community    schedule 12.03.2009    source источник
comment
Я провел поиск, и дубликат не подошел, иначе это бы ответило на этот вопрос. Спасибо всем.   -  person    schedule 12.03.2009


Ответы (3)


Да, если предположить, что вы добавили шевроны намеренно и действительно имели в виду:

public void myMethod(string astring, int? anint)

anint теперь будет иметь свойство HasValue.

person roryf    schedule 12.03.2009

Зависит от того, чего вы хотите достичь. Если вы хотите удалить параметр anint, вам нужно создать перегрузку:

public void myMethod(string astring, int anint)
{
}

public void myMethod(string astring)
{
    myMethod(astring, 0); // or some other default value for anint
}

Теперь вы можете:

myMethod("boo"); // equivalent to myMethod("boo", 0);
myMethod("boo", 12);

Если вы хотите передать int, допускающий значение NULL, посмотрите другие ответы. ;)

person Inferis    schedule 12.03.2009
comment
+1 хорошее предложение использовать полиморфизм - person Dead account; 12.03.2009
comment
@ Гарри, да, ты прав, это не так. - person Dead account; 12.03.2009
comment
Я думаю, вы можете избежать перегрузки с помощью такого определения: public void myMethod(string astring, int? anint = null). Таким образом, вы можете вызывать метод только со строкой в ​​качестве параметра, а значение переменной anint будет нулевым; а также вызовите его со строкой и целым числом. - person adripanico; 16.09.2013

В C # 2.0 вы можете:

public void myMethod(string astring, int? anint)
{
   //some code in which I may have an int to work with
   //or I may not...
}

И вызовите метод вроде

 myMethod("Hello", 3);
 myMethod("Hello", null);
person Dead account    schedule 12.03.2009