.NET und C# ohne Web?
знаете, что происходит в виуал студии при отладке и ожившим эксепшен?
Нет, не знаю. Но меня это не волнует. Допустим мелкософт не в состоянии состряпать дебаггер работающий с исключениями. Это что, повод от них отказываться?
то надо было микрософту сказать лет х этак назад
Мелкомягких надо было душить в колыбели, да.
Но если исключение нам не надо, то надо для начала решить где мы и как вообще программируем. В ОО? Тогда что-то вроде OptionalInt возвращаем. В функциональном? Конечно кортеж.
В дурной поделке в которой намешано всё что можно и сверху бантик? Придумываем очередную ерунду для аргументов, бесспорно, ref нам было мало.
P.S. Кстати, вспомнил, в Шарпе есть и подобие union type - OneOf. Можно возвращать OneOf<int, string> или int или строку с ошибкой.
Вместе с тем - есть нуллабле типы - не можешь - верни нулл и не парься..
Это разные вещи. Эксэпшион означает - я должен считать, но не могу. Поэтому обрываю работу в виду невозможности продолжения. Возврат наля означает - а я могу, у меня все в порядке, посмотрите, какую интересную фигню я вам насчитал.
Сорри, представьте, что вы рассказываете папуасу о машинах. Мерседес это как БМВ, а предком у всех был порше Я не шарповед, я явист. Вы мне по возможности на пальцах обьясните, вот такая классная фича, вот что можно с ней удобнее делать. В противовес массив как аргумент функции. Для чего нужна еще одна сущность, если есть массивы?
-----
https://www.geeksforgeeks.org/difference-between-ref-and-o...
2 и 4 в табличке внизу.
Чем кортеж отличается от массива?
-----
Массив, обычно, однотипен.
А у кортежа не факт что есть индексер.
А вообще - не требовлось пока до кортежей подниматься.
чем отличается out от ref
out - используется исключительно для возврата значения
ref - это входное и возвращаемое значение
что такое кортеж?
контейнер объектов. Считай, что это класс к вотором есть только геттеры.
Чем кортеж отличается от массива?
1) кортеж может хранить объекты разных типов
2) у кортежа нет итератора и нет доступа по индексу
3) кортеж хранит фиксированное (и заранее известное) количество полей
Короче говоря, если тебе надо чтобы функция возвращала больше одного значения - кортеж хорошее решение. С другой стороны, использование кортежей (aka необходимость возвращать несколько значений) оправдано практически никогда, так что говорит скорее о плохом дизайне :)
на пальцах обьясните
------
out -
ты не можешь передать значение в метод, но обязан в методе присвоить значение
ref -
ты обязан инициировать переменную и значение передается в метод, по выходе изменения в переменной переписываются в исходную переменную.
не помню содается ли копия или будут состязания.
у меня все в порядке
-----
У тебя и так все в порядке - в трай-методе ты используешь оут-параметер чтобы вернуть значение и возвращаемое значение чтобы сказать можно ли использовать возвращенное.
При возврате нулабельного типа ты получаешь оба куска информации упакованными в переменную нуллабле типа. Оут-параметер не нужен.
А эксептиона в трай-методах у нас нет.
Возврат наля означает
-----
именно возврат нулла. Не более.
Какой смысл туда вложен = зависит от программиста.
оправдано практически никогда, так что говорит скорее о плохом дизайне :)
Сказал, как отрезал.
навскидку: вот нужна мне функция, которая выдаёт корни квадрантного уравнения
Или функция, которая выдаёт немецкую календарную неделю: kw, year переданной даты.
У тебя нет ехцептионов в трай-методах. См выше.
Просто в Try- методах эксепшены обрабатываются. Собственно говоря, вопрос в том, что является ошибкой. В зависимости от задачи невозможность распарсить значение может быть как ошибкой, так и штатной ситуацией.