Есть ли способ сделать это, поскольку кажется, что частичный метод должен возвращать void (я действительно не понимаю это ограничение, но пусть оно будет)?
Как вернуть значение из частичного метода С#?
Ответ 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
.
Нет, просто шучу.
Не делай этого. Когда-нибудь.