Насколько мне известно, вы не можете иметь тип возвращаемого значения переменной. Типы обязательны для того, чтобы компилятор знал, какую функцию даже вызывать, или если контекст, который вы используете, имеет смысл.
Также, как правило, вы не должны бороться с проверками типов. Они твой лучший друг, а не враг. А отсутствие их и агрессивное неявное преобразование - вот что приводит примеры PHP и JavaScript из этого комикса .
Большинство решений обходятся вокруг этого, имея несколько возвращаемых значений, каждое из которых может иметь разныетип:
1 Создайте структуру, кортеж или класс , которые могут иметь как успех, так и результат, используйте его в качестве возвращаемого типа. Но ты вроде уже сделал это. Проверьте значения успеха, прежде чем использовать возвращаемое значение. Дополнительные параметры превратят результат в свойство, которое вызовет исключение, если sucess имеет значение false. См. Класс Task и BackgroundWorkerCompletedEventArgs.Result для примеров этого.
2 Создайте поверхностную иерархию классов . Что-то вроде
abstract class BaseReturnValue { }
class FailureValue : BaseReturnValue { }
class SuccessValue : BaseReturnValue { string value; }
Функция будет возвращать тип BaseReturnValue. Но поскольку он является абстрактным, вы можете использовать только экземпляры FailureValue или SuccessValue в коде. Остальные - проверки.
3 Выходные параметры. Out позволяет получить более одного возвращаемого значения без необходимости написания класса. Все варианты TryParse () использует его для возврата логического значения, указывающего на успешность, и в то же время дает вам также проанализированное целое число.