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

Как вернуть значение из частичного метода С#?

Есть ли способ сделать это, поскольку кажется, что частичный метод должен возвращать void (я действительно не понимаю это ограничение, но пусть оно будет)?

4b9b3361

Ответ 1

Ну, технически вы можете "вернуть" значение из частичного метода, но он должен быть через аргумент ref, поэтому он довольно неудобен:

partial void Foo(ref int result);

partial void Foo(ref int result)
{
    result = 42;
}

public void Test()
{
    int i = 0;
    Foo(ref i);
    // 'i' is 42.
}

В этом примере значение i не изменится, если Foo() не реализовано.

Ответ 2

От MSDN:

  • Объявления частичного метода должны начинаться с частичного ключевого слова context, а метод должен возвращать void.

  • Частичные методы могут иметь параметры ref, но не из параметров.

Итак, ответ нет, вы не можете.

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

Ответ 3

Вы не можете вернуть значение из частичного метода.

Частичные методы могут быть или не быть реализованы. Если бы было разрешено вернуть значение из такого метода, то что получил бы получатель?

Ответ 4

Причиной ограничения является эта строка из MSDN:

Частичный класс или структура может содержать частичный метод. Одна часть класс содержит подпись метод. Необязательная реализация может быть определены в той же части часть. Если реализация не, затем метод и все вызовы метода удаляются при время компиляции. - Акцент на шахте

Если метод не может быть реализован и его можно удалить. Что произойдет с его возвращаемым значением, если вызов будет удален?

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

Ответ 5

О. Однажды я должен был сделать это в моем проекте. Вы можете создать исключение в методе ReturnValueException, который вы определяете как исключение, имеющее свойство объекта с именем ReturnedValue. Теперь вы можете вызвать свой метод Foo() внутри блока try и собрать результаты в блоке catch.

Нет, просто шучу.

Не делай этого. Когда-нибудь.