【问题标题】:What is the C# equivalent for the VB function IsObject?VB 函数 IsObject 的 C# 等效项是什么?
【发布时间】:2020-04-30 08:04:55
【问题描述】:

在 VB6 中,我可以这样写:

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

根据the modern VBA docs,我意识到这不一定与他们的VB6对应物完全匹配,这个函数的行为如下:

返回一个布尔值,指示标识符是否代表对象变量。

文档还说:

IsObject 仅在确定 Variant 是否属于 VarType vbObject 时有用。如果 Variant 实际引用(或曾经引用)一个对象,或者它不包含任何内容,则可能会发生这种情况。

如果我在 C# 中有一个等效函数,它接受 dynamic 类型的参数,那么 IsObject 的 C# 等效函数是什么?

【问题讨论】:

  • C# 是静态类型的。变量类型是否为对象应该很明显。通过if (someVariable != null) 可以测试该值是否为空
  • 知道'Do stuff 是什么会很有趣——可能是在.NET 世界中,无论someVariable 是什么,执行它都是相关的——或者需要完全不同的测试仅与IsObject 有相似之处。
  • @Damien_The_Unbeliever 好点。我自己也有类似的认识;问题的上下文不充分,无法合理地尝试回答。我会进行编辑。

标签: c# vb6-migration


【解决方案1】:

在 VBA 中最接近“对象”的是引用类型。您可以使用以下方法:

IsPrimitive

IsValueType

IsClass

这些方法结合在一起将帮助您迁移您拥有的那段代码。但是请注意,您需要对 types in C# 有深入的了解 - 否则您最终会得到比您希望的代码执行的代码lessmore。 p>

个人拥有数十年的 VB6 经验和十多年的 C# 经验,我强烈重新考虑我使用这些的原因。与 VBA 不同,您极少需要偏离强类型语法,即事先知道变量的至少基本属性的语法,例如它是引用类型还是值类型。

【讨论】:

  • 太好了,这正是我正在寻找的东西。在 C# 中,我们不得不求助于动态作为变体的等价物,其中强类型替换不是立即显而易见的。我非常不喜欢动态,并尽可能将代码重构为强类型。其余的动态用法最终将用于后续的代码扫描。
猜你喜欢
  • 2015-10-04
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2019-08-27
  • 2023-03-07
相关资源
最近更新 更多