Так в том и дело, зачем было вообще создавать этот конфликт и нарушать симетрию, если можно было сразу всё сделать красиво? Вы мне лучше на этот вопрос ответьте, а то ходите по кругу: is var всегда true, потомучто case var всегда true, а default var не подойдёт, потому что есть уже case var.
Мне неинтересны аргументы, почему такое решение не подойдёт сейчас, я сам всё это прекрасно понимаю.
Вы мне объясните, зачем сделали именно так, а не иначе… В чём проблема сохранения прежнего значения var?
Do(SomeFunction().To(out var x).DoSomethingWith(x));
Other(SomeFunction().To(out var y).DoSomethingWith(y));
или раз уж на то пошло
SomeFunction().To(out var p); //pure
Do(SomeFunction().DoSomethingWith(p));
Other(SomeFunction().DoSomethingWith(p));
Да и вообще хорошо, что ваш пример не компилируется, поскольку в C# методы в основном не чистые да и многие типы изменяемые, что защищает от написания неоптимального кода.
Да пользуйтесь, чем вам хочется. Я что, склоняю вас к чему-то? Все эти примеры предназначены в основном для тех, кто предпочитает использовать var в классическом значении вывода типа.
Это грамотная композиция, а не смешение. Мы берём фичи A и B, комбинируем и получаем C=AB, а не С=XB, где X это как A, но уже не совсем в данном контексте.
С чего вдруг?
case var матчит любой случай кроме null
default var матчит любой случай вместе с null
Даже удобнее получается.
Вывод типа и только.
нет здесь побочных эффектов?
Наверное, так
Вы убрали
var x =. Так уберитеTo(out var p)и получите тот же результат.Мне неинтересны аргументы, почему такое решение не подойдёт сейчас, я сам всё это прекрасно понимаю.
Вы мне объясните, зачем сделали именно так, а не иначе… В чём проблема сохранения прежнего значения var?
или раз уж на то пошло
Да и вообще хорошо, что ваш пример не компилируется, поскольку в C# методы в основном не чистые да и многие типы изменяемые, что защищает от написания неоптимального кода.
Можно реализовать и одним делегатом, но мне больше нравится отделять проверку на null.
Матчинг по значениям можно добавлять, например, так
null можно обработать двумя способами
либо
Встречный вопрос, не надоело?
Как по вашему должен работать такой псевдокод
где базовый Shape (выведенный тип для var) поддерживает деконструкцию?
Если я пишу
и далее естественным образом заменяю на
с полным сохранением логики работы, то закономерно ожидаю аналогично симетрии для случаев
Увы, эта симетрия нарушена… Почему? Может, вы мне поясните примерами кода, где это крайне необходимо?