До C # 7.0 действовал следующий код:

if(x is X)
{
    //...
}

Теперь также действует следующее:

if(x is X _)
{
    //...
}

Accoding к TryRoslyn, эти участки кода генерирует тот же ил. Мой вопрос: какова цель оператора сброса в сопоставлении с образцом, если он не нужен и не полезен? Я что-то здесь упускаю?

Этот вопрос отличается от этого вопроса, поскольку я задаю назначение оператора сброса (подстановочный знак) специально для сопоставления с образцом (оператор is).

2
Logerfo 24 Апр 2017 в 17:15

2 ответа

Лучший ответ

Согласно Нилу Гафтеру, в этом случае оператор сброса это в значительной степени бесполезно, по крайней мере сейчас.

2
Logerfo 25 Апр 2017 в 12:00

Это пока не полезно. Но когда вводится рекурсивное сопоставление с образцом (будем надеяться, в C # 8.0), будет полезно иметь отбрасывания в части образца.

Детали не уточнены, но представьте что-то вроде is (1, (_, 3)) или, возможно, is X (1, Y (_, 3)).

1
Julien Couvreur 8 Июл 2017 в 18:48
43590517