Visual Basic中与C#类型检查的等效语句

54

以下是C#布尔表达式的Visual Basic等效形式是什么?

data.GetType() == typeof(System.Data.DataView)

注意:变量 data 声明为 IEnumerable


你尝试过在线转换器吗?比如http://www.developerfusion.com/tools/convert/csharp-to-vb/ - Dan Diplo
4个回答

81

据我回忆

TypeOf data Is System.Data.DataView

编辑:
正如James Curran所指出的那样,如果数据是System.Data.DataView的子类型,则这个方法也适用。

如果您想将其限制为仅限于System.Data.DataView,则应该使用以下方法:

data.GetType() Is GetType(System.Data.DataView)

3
请注意,如果VB中的"is"与C#中的"is"类似,那么只有当数据是DataView或派生自DataView时才为真。原始代码仅在数据特别是DataView对象时为真。 - James Curran
1
@James Curran:很好的观点,我已经更新了它,并加上了我知道的另一种检查方法(具有讽刺意味的是,在编辑之前我最初就是这样做的方式)。 - Powerlord
2
@James:VB 的 Is 实际上与 object.ReferenceEquals 完全相同。但是,Typeof … Is 确实等同于 C# 的 is 运算符。 - Konrad Rudolph
这在Visual Studio中似乎很好用,但在dotnetfiddle.net上,第一段代码会导致编译错误,显示“<typename>是类类型,不能用作表达式。”是否有什么技术上必须导入的东西才能使用第一种比较方式,而Visual Studio会自动导入? - Panzercrisis

42

为了C#程序员的方便,我想发布一个总结:

C# val is SomeType

      在VB.NET中:TypeOf val Is SomeType

      与Is不同的是,只能用Not TypeOf val Is SomeType否定。

C# typeof(SomeType)

      在VB.NET中:GetType(SomeType)

C# val.GetType() == typeof(SomeType)

      在VB.NET中:val.GetType() = GetType(SomeType)

      (不过Is也可以,见下文)

C# val.ReferenceEquals(something)

      在VB.NET中:val Is something

      可以很好地否定:val IsNot something


C# val as SomeType

      在VB.NET中:TryCast(val, SomeType)

C# (SomeType) val

      在VB.NET中:DirectCast(val, SomeType)

      (除涉及实现转换运算符的类型之外)


非常小心强制转换。它们与C#版本并不完全等价(在VB中没有真正的方法来获取完整的C#强制转换语义)。 - skolima

3
你可以使用 TryCast 然后检查是否为nothing,这样你就可以在稍后使用转换类型了。如果不需要这样做,请不要这样做,因为其他方法更有效率。
看下面的例子: VB:
    Dim pnl As Panel = TryCast(c, Panel)
    If (pnl IsNot Nothing) Then
        pnl.Visible = False
    End If

C#

Panel pnl = c as Panel;
if (pnl != null) {
    pnl.Visible = false;
}

@Teejay 请解释一下。 - Nick N.
与Powerlord的答案中所解释的方法相比,TryCast真的非常低效! - Teejay
@Teejay 那最好把我的回答删掉吗? - Nick N.
我认为你不应该这样做。你的回答并没有错,但它并不是 OP 所要求的:他们只想进行类型检查,但你却通过强制转换对象而超出了要求(这可能是不必要的)。如果你需要转换后的对象,那么 TryCastas 就可以了。 - Teejay
1
也许你应该只强调句子“这样你以后可以使用转换后的类型”。 - Teejay

1

试试这个。

GetType(Foo)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接