2010-08-18 72 views
7

我以前用过C#。但是,在我加入一家新公司后,我需要编写vb.net。不过,我觉得写它很困难。因为我发现vb.net不是强类型的。它真的不是很强类型?或者任何设置?这里是一些例子。VB.NET弱类型?强类型的?

If (Me.Check1() And Me.Check2()) Then 

从我的C#的知识,一旦Me.Check1()返回false,Me.Check2()将不会被执行。但我错了。 And适用于按位操作。我应该使用AndAlso进行布尔操作。所以它应该是

If (Me.Check1() AndAlso Me.Check2()) Then 

的问题是,If (Me.Check1() And Me.Check2()) Then仍然有效,并且没有编译错误。我真的很想知道我是否能够检查这种“不适当”的操作。

AndAndAlso只是案例之一。

有时候,我需要做的忽略案件的字符串比较。但是,每个人都会犯错误。有时,我做了

If (String.Compare(Me.string1, Me.string2, True)) Then 

我想大家都知道这个问题。它应该是

If (String.Compare(Me.string1, Me.string2, True) = 0) Then 

但是,我仍然无法在编译过程中检查这种情况。

我爱C#,因为它可以帮助我们找到编译过程中的诸多问题。但是,VB.NET让我非常困惑,并且在运行时和测试期间必须确定许多错误。

还有一个例子是,

Public Sub MySub(ByVal obj as Object) 
    Console.WriteLine(obj.MyProperty) 
End Sub 

在vb.net,这种说法仍然有效。为什么?为什么?为什么?有谁知道如何使用像C#一样的vb.net?

+4

选项严格在 – 2010-08-18 23:45:24

+1

关你真的例子说明弱类型。也许动态打字。 – recursive 2010-08-18 23:54:50

+0

我知道这是旧的,但我认为这个评论是相关的。 OP对布尔运算符和按位运算符存在误解。 VB在这方面的工作方式与C#完全相同。在C#中你有''&&运营商短路布尔运算,你有'&'运营商对非短路布尔运算和位运算。它们与VB中的“AndAlso”和“And”类似。 C#中的'||'和'|'以及VB中的“OrElse”和“Or”也是如此。 – jmcilhinney 2017-10-18 07:57:12

回答

11

VB.Net既有强与弱类型的模式。它通过严格选项进行控制。这可以设置为项目或源文件级别。

' Enable VB.Net strong typing 
Option Strict On 

' Enable VB.Net weak/dynamic typing 
Option Strict Off 
+2

哇...非常感谢你!一旦我打开它,超过1000个编译错误。哈哈哈〜真的非常感谢! – 2010-08-18 23:59:23

+0

还有一个问题,你知道如何制作一个强类型的'IIf'吗?在C#中,'?:'运算符是强类型的。 – 2010-08-19 00:06:42

+3

如果您使用Visual Studio 2008,请使用'If'而不是'IIf' IIRC – JaredPar 2010-08-19 00:09:41

0

我最近在一个较旧的vb.net项目上点击了Option Strict按钮,并花了好几个小时修复类型错误,但它是值得的。请确保在DateTime周围非常小心地处理字符串,并将字符串转换为DateTime转换。我有几个“12:00:00 AM”的实例粘到文本框的末尾,这会导致旧代码库出现问题。

一旦错误是明显的,你可以在这样昏暗的会像C#的var将选项推断,你不必明确键入您所有的LINQ查询。

(我会做出这样的评论,但似乎我需要更多的点,不好意思)