Эквивалентом VB.NET для C# 7 является шаблон объявления оператора

Существует ли эквивалент VB.NET С# 7 — шаблон объявления оператора? Обратите особое внимание на bmp в следующем примере кода:

public void MyMethod(Object obj)
{
    if (obj is Bitmap bmp)
    {
        // ...
    }
}

Или синтаксис сопоставления коротких шаблонов с is является эксклюзивным для C#?

ИЗМЕНИТЬ:

Я уже знаю эти синтаксисы:

    If TypeOf obj Is Bitmap Then
        Dim bmp As Bitmap = obj
        ' ...
    End If

or

    Dim bmp As Bitmap = TryCast(obj, Bitmap)
    If bmp IsNot Nothing Then
        ' ...
    End If

Я хочу знать, есть ли что-то еще короче, например что новый C#7 является шаблоном объявления оператора...

Большое спасибо.


person VBobCat    schedule 26.11.2017    source источник
comment
Извините, я не спросил четко с самого начала. Пожалуйста, смотрите редактирование.   -  person VBobCat    schedule 26.11.2017
comment
Я думаю нет. Команда vb.net решил не выполнять непрерывные улучшения C#.   -  person dovid    schedule 26.11.2017
comment
github.com/dotnet/vblang/issues/124 github.com/dotnet/vblang/issues/172   -  person dovid    schedule 26.11.2017
comment
Этот трюк не актерский состав. Хитрость заключается в объявлении переменной в той же строке кода.   -  person Joel Coehoorn    schedule 15.02.2018
comment
В настоящее время в репозитории vblang Github есть несколько связанных открытых предложений; см. здесь и здесь среди прочего.   -  person Zev Spitz    schedule 13.12.2019


Ответы (2)


В настоящее время нет. Если вы хотите реализовать это, вам придется использовать некоторые из более длинных форматов, которые вы уже упоминали в своем вопросе.

Языки C# и VB не всегда имеют эквивалентные функции.

person simonalexander2005    schedule 04.04.2018

Используйте одну строку, если

If obj is bitmap Then Dim bmp = obj

или используйте встроенный if (это функция if)

Dim bmp = If(obj is bitmap, obj, Nothing)

Не совсем сопоставление с образцом как таковое, но делает то же самое.

Не могли бы вы сделать это так на С#:

var bmp = obj is bitmap ? obj : nothing;
person John Grabauskas    schedule 14.05.2019
comment
Что касается моего тестирования, это пропустит ввод объекта и вернет тип объекта. - person bkqc; 17.12.2020
comment
obj is bitmap является незаконным. - person NetMage; 11.05.2021
comment
Не делайте ничего из этого. Используйте стандартный (и уже упомянутый) Dim bmp As Bitmap = TryCast(obj, Bitmap). Если Option Strict включено, а Option Infer выключено, то Dim действует как var, so can shorten this to Dim bmp = TryCast(obj, Bitmap)` в c#. - person ToolmakerSteve; 03.08.2021