Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET弱类型?强类型?_Vb.net - Fatal编程技术网

VB.NET弱类型?强类型?

VB.NET弱类型?强类型?,vb.net,Vb.net,我以前用过C。然而,在我加入一家新公司后,我需要编写vb.net。然而我发现写起来很难。因为我发现vb.net不是强类型的。它真的不是强类型的吗?或者有什么设置?这里有一些例子 If (Me.Check1() And Me.Check2()) Then 据我所知,一旦Me.Check1()返回false,Me.Check2()将不会执行。但是我错了和用于按位操作。对于布尔运算,我应该使用和。应该如此 If (Me.Check1() AndAlso Me.Check2()) Then 问题是如

我以前用过C。然而,在我加入一家新公司后,我需要编写vb.net。然而我发现写起来很难。因为我发现vb.net不是强类型的。它真的不是强类型的吗?或者有什么设置?这里有一些例子

If (Me.Check1() And Me.Check2()) Then
据我所知,一旦
Me.Check1()
返回false,
Me.Check2()
将不会执行。但是我错了<代码>和用于按位操作。对于布尔运算,我应该使用
。应该如此

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

以及
只是其中一种情况

有时,我需要进行忽略案例字符串比较。然而,每个人都会犯错误。有时候,我会

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吗?

vb.net既有强类型模式,也有弱类型模式。它通过“严格”选项进行控制。这可以在项目或源文件级别设置

' Enable VB.Net strong typing 
Option Strict On

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

我最近在一个旧的vb.net项目上点击了Option Strict按钮,花了几个小时修复类型错误,但这是值得的。请务必非常小心地处理DateTime到字符串以及字符串到DateTime的转换。我在textbox的末尾添加了几个“12:00:00am”的实例,这会导致旧代码库出现问题

一旦错误被清除,您就可以打开optioninfer,这样Dim将像c#的var一样工作,并且您不必显式地键入所有Linq查询


(我本想对此发表评论,但我似乎需要更多的观点,对不起)

您的示例中没有一个真正说明打字的不足。可能是动态输入。我知道这是旧的,但我认为这条评论是相关的。OP对布尔运算符和位运算符存在误解。在这方面,VB的工作方式与C完全相同。在C#中,短路布尔运算有
&
运算符,非短路布尔运算和按位运算有
&
运算符。它们100%类似于VB中的
以及
。C语言中的
|
|
以及VB中的
OrElse和
也是如此。哇。。。非常感谢你!!!一旦我打开它,超过1000个编译错误。哈哈哈~真的很感谢!!!还有一个问题,你知道如何制作强类型的
IIf
?在C#中,
?:
操作符是强类型的。如果您使用的是Visual Studio 2008,请使用
If
而不是
IIf
iirc,您还可以在项目级别设置选项Strict On,以便所有代码文件都具有强类型。转到项目属性的“编译”页,并在那里设置Option Strict。@JaredPar:错误。VB.NET的
IIf
优于VB6。在VB6中,
IIf
函数的true和false部分都被计算,而不管条件是true还是false。在VB.NET中,先计算条件,然后根据结果执行true语句或false语句。这相当于C#的
条件?truePart:falsePart
。除非您希望我们也避免使用C#的三元运算符,否则我认为没有理由不使用VB.NET的
IIf