Подтвердить что ты не робот

Есть ли способ опустить параметр?

Предположим, что у меня есть функция с параметром out, но мне не нужно ее значение. Есть ли способ передать никакой фактический параметр, если данный результат все равно будет выброшен?

EDIT:

Хотя вопрос был проголосован за то, что он обманул Дополнительные параметры вывода это только если вы посмотрите с точки зрения создателя метода. Если вы являетесь пользователем метода, вам не нужно делать параметр необязательным, просто не используя его без объявления переменной. И хотя это невозможно, С# 7.0 можно объявить его в вызове метода. Поэтому вместо:

int unusedValue;
TryGetValue("key", out unusedValue);

вы получаете:

TryGetValue("key", out int unusedValue);

или даже:

TryGetValue("key", out _);

Это нужно добавить в качестве ответа, но:

  • Я не могу сделать этого для этого вопроса, потому что он был отмечен как обман,
  • Вопрос этот вопрос представляется как обман, фактически требует другого.
4b9b3361

Ответ 1

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

С# 4.0 предоставляет необязательные параметры, но параметры out не могут быть необязательными.

EDIT: Кстати, вы также можете перегрузить метод:

int DoStuff()
{
    int temp;
    return DoStuff(out temp);
}

int DoStuff(out outParam)
{
    //...
}

Ответ 2

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

public void DoSomething(int param1, out int param2)
{
    /* Method work here */
}

public void DoSomething(int param1)
{
    int temp;
    DoSomething(param1, out temp);
}

Ответ 3

Не уверен в С#, но в VB.Net вы можете просто передать константу в выходной (byref) параметр. Поэтому, если у вас есть целое число, в качестве выходного параметра вам не нужно передавать действительную переменную, вы можете просто передать значение 0 или любое другое действительное целое число. Для объектов, включая строки, которые вы можете просто передать в Nothing (Null in С#), и все работает отлично. Я не уверен, где хранится переменная, возможно, только в стеке, как и в любом другом параметре, который вы проходите, и исчезает, когда функция завершается.