Size: a a a

2021 July 16

ND

Nikolajs Djačenko in CODE BLOG / C#
А, можно через дискард
источник

ND

Nikolajs Djačenko in CODE BLOG / C#
_ =>
источник

ND

Nikolajs Djačenko in CODE BLOG / C#
Ну или or, да
источник

ND

Nikolajs Djačenko in CODE BLOG / C#
Ты можешь перечислить только нужные кейсы, а все остальное дискардом
источник

IC

Ilya L Che in CODE BLOG / C#
Идея в том, что мы явно перечисляем все возможные типы. При появлении нового мы вернёмся к свитчу и примем осознанное решение об обработке нового типа.
источник

ND

Nikolajs Djačenko in CODE BLOG / C#
Ну, это через ор
источник

IC

Ilya L Che in CODE BLOG / C#
Угу, работает. Тогда рослин анализаторы могут норм сработать, наверное.
источник

IC

Ilya L Che in CODE BLOG / C#
Другое дело, что я ничего такого в опенсорсе не видел.
источник

S

Sergey Trofimov in CODE BLOG / C#
Илья, тебе в про чате скучно стало ?)
источник

S

Sergey Trofimov in CODE BLOG / C#
решил к шкильникам залететь
источник

IC

Ilya L Che in CODE BLOG / C#
источник

IC

Ilya L Che in CODE BLOG / C#
Чем больше чатов, тем больше тем можно обсудить с разными людьми.
источник

IC

Ilya L Che in CODE BLOG / C#
Лол, только сейчас увидел:
To enable exhaustiveness checking for a switch on type, two things must be done. The default case must throw an ExhaustiveMatchFailedException (using the ExhaustiveMatch.Failed(…) factory method) and the type being switched on must be marked with the Closed attribute.
источник

IC

Ilya L Che in CODE BLOG / C#
То есть сперва opt-in в месте объявления типов, а потом ещё opt-in в месте свитча.
источник

S

Sergey Trofimov in CODE BLOG / C#
удобно)
источник

S

Sergey Trofimov in CODE BLOG / C#
(нет)
источник

IC

Ilya L Che in CODE BLOG / C#
Ну и switch-expression не поддерживаются, разумеется. Но как прототип пойдёт.
У рослин-анализаторов есть ещё одна проблема - их надо в каждый проект добавлять, где хочется использовать.
источник

S

Sergey Trofimov in CODE BLOG / C#
так а суть в чем? не пропустить case?
источник

IC

Ilya L Che in CODE BLOG / C#
Ага.
[Closed(typeof(Circle), typeof(Square), typeof(Triangle))]
public abstract record Shape

public sealed record Circle : Shape;
public sealed record Square : Shape;
public sealed record Triangle : Shape;

switch(shape) // Error: what about Triangle?
{
   case Circle _: throw new Exception("Circle");
   case Square _: throw new Exception("Square");
   default: throw ExhaustiveMatch.Failed(shape);
}
источник

IC

Ilya L Che in CODE BLOG / C#
Ещё почему-то нельзя убрать дискард и просто написать case Circle:, пишет, что не поддерживается. Но разработка недалеко ушла, как я понимаю.
источник