Здравствуйте, igna, Вы писали:
I>Иногда результатом работы метода являются два значения, причем первое всегда используется вызывающим кодом, второе — только в некоторых случаях. Это второе значение можно сделать невидимым для кода, которому оно не нужно, поместив оба значения-результата в struct и определив операцию неявного преобразования к типу первого значения:
I>Возражения принимаются.
Ну самое очевидное возражение — как понять, есть ли опциональное значение или нет? Т.е. тут нужен по кр. мере nullable-тип или какой-нибудь флажок.
Потом — бывает ли у метода такая ситуация, что запрашиваемое действие выполнить невозможно? Т.е. и обязательного параметра не будет?
Потом это, конечно, все зависит от прикладной задачи — т.е. насколько необходима именно структура — ну вот мне какой-то такой вариант как-то больше нравится:
public class Result
{
public Status Status { get; private set; }
}
public sealed class SimpleResult : Result
{
public int SomeValue { get; }
}
public sealed class ComplexResult : Result
{
public int SomeValue { get; }
public int AnotherValue { get; }
}