Что эквивалентно C# для функции VB IsObject? - PullRequest
2 голосов
/ 30 апреля 2020

В VB6 я могу написать что-то вроде этого:

Private Sub MyMethod(ByVal someParameter Variant)
    If IsObject(someVariable) Then
        'do stuff
    Else
        'do something else
    End If
End Sub

Согласно современные документы VBA , которые, как я понимаю, не обязательно точно соответствуют их аналогам VB6, эта функция работает следующим образом:

Возвращает логическое значение, указывающее, представляет ли идентификатор переменную объекта.

Документы также отмечают:

IsObject полезен только при определении, имеет ли Variant вариант VarType vbObject. Это может произойти, если Variant фактически ссылается (или когда-то ссылался) на объект, или если он содержит Nothing.

Если у меня есть эквивалентная функция в C#, которая принимает параметр типа dynamic что такое C# эквивалент для IsObject?

1 Ответ

2 голосов
/ 30 апреля 2020

Наиболее близким к объекту в VBA является ссылочный тип. Вы можете использовать следующие методы:

IsPrimitive

IsValueType

IsClass

Эти методы, объединенные вместе, помогут вам перенести этот фрагмент кода, который у вас есть. Однако обратите внимание, что вам нужно хорошо понимать типы в C# - в противном случае вы получите код, выполняющий меньше или больше , чем вы хотели это делать.

Лично имея десятилетия опыта работы с VB6 и более десяти лет в C#, я бы решительно пересмотрел свои причины их использования. В отличие от VBA, вам крайне редко нужно отклоняться от строго типизированного синтаксиса, то есть от того, где заранее известны хотя бы базовые c свойства ваших переменных, например, тип ссылки или значение.

...