Иногда результатом работы метода являются два значения, причем первое всегда используется вызывающим кодом, второе — только в некоторых случаях. Это второе значение можно сделать невидимым для кода, которому оно не нужно, поместив оба значения-результата в
struct и определив операцию неявного преобразования к типу первого значения:
struct FResult {
public int Required { get; private set; }
public int Optional { get; private set; }
public FResult(int required, int optional)
: this() { Required = required; Optional = optional; }
public static implicit operator int(FResult result) {
return result.Required;
}
}
FResult F() {
. . .
return new FResult( . . .
}
void G() {
int i = F();
. . .
}
void H() {
FResult r = F();
int i = r.Required;
int j = r.Optional;
. . .
}
Возражения принимаются.