Re: Опциональное возвращаемое значение
От: kisel Украина  
Дата: 25.05.09 09:29
Оценка:
Здравствуйте, igna, Вы писали:

I>Иногда результатом работы метода являются два значения, причем первое всегда используется вызывающим кодом, второе — только в некоторых случаях. Это второе значение можно сделать невидимым для кода, которому оно не нужно, поместив оба значения-результата в struct и определив операцию неявного преобразования к типу первого значения:


I>
I>struct FResult {
I>    public int Required { get; private set; }
I>    public int Optional { get; private set; }
I>    public FResult(int required, int optional)
I>        : this() { Required = required; Optional = optional; }
I>    public static implicit operator int(FResult result) {
I>        return result.Required;
I>    }
I>}

I>FResult F() {
I>    . . .
I>    return new FResult( . . .
I>}

I>void G() {
I>    int i = F();
I>    . . .
I>}

I>void H() {
I>    FResult r = F();
I>    int i = r.Required;
I>    int j = r.Optional;
I>    . . .
I>}
I>


I>Возражения принимаются.

1) Преобразование типов используется не по назначению.
Нет механизма преобразования int к FResult.
Преобразование FResult к int не будет поддерживать транзитивность, тобишь FResult >> int >> NewFResult и имеем FResult <> NewFResult в случаи,
если нужно использовать свойство — Optional.
2) Логика по принятию решения, нужно использовать Optional или не нужно должна быть реализована за пределами класса F и результатов которые он возвращает.
Не стоит "косвенно" и "неявно" засунуть эту логику в FResult, это не его обязанности.
Вернёт метод 2 значения и что в этом такого, тот кто получил эти значения должен знать как с ними работать.
3) Сдаётся, что пахнет полиморфизмом.
Трудно что то конкретное подсказать, нужна более детальная инфа о пред. области.
Вопросы аля в одном слчаи должен в другом нет >> явный намёк на полифорфизм.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.