Visual Basic equivalent of C# type check
以下C布尔表达式的Visual Basic等价物是什么?
1
| data .GetType() == typeof(System.Data.DataView) |
注:变量data声明为IEnumerable。
- 您尝试过在线转换器吗,例如developerfusion.com/tools/convert/csharp-to-vb
我回忆起
编辑:正如James Curran指出的那样,如果数据也是System.Data.DataView的一个子类型,那么这也可以工作。
如果只想将其限制为System.Data.DataView,那么应该可以:
1
| data .GetType() Is GetType (System.Data.DataView) |
- 但是,请注意,如果vb"is"与c"is"类似,则如果数据是数据视图或从数据视图派生,则为真。只有当数据是特定的DataView对象时,原始代码才是真的。
- @詹姆斯·科伦:好的,我已经用我知道的另一种检查方法更新了它(讽刺的是,在编辑之前我最初的方法)
- @詹姆斯:vb的Is实际上与object.ReferenceEquals相同。但Typeof … Is实际上等于c的Is操作符。
- 这在Visual Studio中似乎可以很好地工作,但在dotnetfiddle.net中,第一段代码会导致编译错误,它说,"是类类型,不能用作表达式。"在技术上,是否需要导入某些内容才能使用第一种比较类型,而Visual Studio会自动导入这些比较类型?
我只是想为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 cast语义)。
您也可以使用Trycast,然后检查是否为空,这样您以后就可以使用强制类型了。如果你不需要这样做,不要这样做,因为其他人更有效率。
请参见此示例:
VB:
1 2 3 4
| Dim pnl As Panel = TryCast(c, Panel)
If (pnl IsNot Nothing) Then
pnl.Visible = False
End If |
C.*
1 2 3 4
| Panel pnl = c as Panel;
if (pnl != null) {
pnl.Visible = false;
} |
- 真的很不正式
- @蒂杰,请解释一下
- 与PowerLord Answer中解释的方法相比,TryCast确实不合理!
- @蒂杰,所以最好去掉我的答案?
- 我认为你不应该。你的回答是正确的,但这不是OP要求的:他们只想做一个类型检查,但你超越了投射对象(这可能不是必要的)。如果你需要铸造的物品,那么TryCast或as就可以了。
- 也许你应该只强调这句话,这样你可以使用铸造类型以后。
- @像这样的蒂杰?
- 对。我取消了投反对票!
试试这个。