从C#迁移到VB.Net

时间:2009-03-08 15:46:00

标签: c# vb.net

因此,作为这个全球金融市场的直接结果,我明天将开始作为VB.net开发人员的新工作。到目前为止,我一直在开发C#(java,vb6,sql,tibco等等)

所以问题是这个,有什么需要注意的,有没有人对编写好的vb.net代码有任何好的建议?

(关于应对薪水/潜在客户的任何其他建议都是欢迎但不是必不可少的; - ))


只是一个快速更新,公司似乎非常好,目前的代码库看起来质量非常高。我开始适应VB的做事方式(虽然不能阻止自己添加分号!)。再次感谢大家的有益建议。

8 个答案:

答案 0 :(得分:25)

Option Strict

在VB中最重要的事情,在我(绝对不谦虚)的意见中,始终使用Option Strict On (除了,基于每个文件,非-strict键入是有意义的,例如因为您使用PIA与MS Office进行互操作)并在VS选项中启用它。

Option Strict OnOption Explicit On一起提供与C#大致相同的行为。切换后,它会在编译时删除大量类型检查,并允许在完全不相关的类型之间进行虚假,不必要和难以调试的隐式转换。

使用COM API时,

Option Strict Off是有意义的。 Option Explicit Off 从不有意义。这是愚蠢的(主要是为了兼容VB6)。

比较:=Is

需要注意的另一件事是:平等与参考测试。在C#中,您使用==。在VB中,你有不同的运算符:

Dim StringA = "Hello"
Dim StringB = Console.ReadLine()
Dim EqualContent = StringA = StringB
Dim EqualRefs = StringA Is StringB

现在,根据用户输入,EqualContent可能是True; EqualRefs始终为False。请注意,Is在语义上等同于以下C#代码(通常没有人写过):

var equalRefs = object.ReferenceEquals(stringA, stringB);

我实际上认为这是VB相对于C#的优势,但很少需要。与Is相反的是IsNot。这里要注意的另一件事是通过=运算符的字符串比较实际上调用了VB运行时方法:Microsoft.VisualBasic.CompilerServices.Operators.CompareString

这考虑了其他几个设置,尤其是Option Compare设置,可能是Binary(默认,C#中的行为)或Text(不区分大小写的比较)。

CTypeDirectCastTryCast

在其他一些情况下也会调用VB运行时,其中一个特别是CType,这是VB中的通用转换运算符。我倾向于避免使用运算符,我强烈建议任何人做同样的事情,支持其他更明确的转换。这样做的原因是CType在应用时会尝试几种语义上非常不同的转换。这使得很难跟踪代码中究竟发生了什么,可能会引入输入错误。

首先,CType允许解析数字的字符串。这是一个通过 NumberType .Parse操作更好地表达的概念,就像在C#中一样。

我建议使用CType代替DirectCast而不是C#强制转换,或TryCast与C#的as转换相同。

另一个问题。检查对象x是否具有某种类型T时,必须使用以下语法:

If TypeOf x Is T Then …

请注意,这不会调用普通的引用比较运算符Is。相反,它使用自己的运算符构造TypeOf … Is …。但是不能TypeOf … IsNot …。这可能是规格中的一个错误。

混杂。 ...

存在很多差异,一些有用(例如Select Case语句中的差异)和一些较少(例如Like运算符用于基本通配符匹配...只需使用正则表达式。)< / p>

与此有关的其他一些问题:

答案 1 :(得分:8)

只是一个小细节作为警告。如果在VB.NET中声明一个数组,括号之间的数字表示上限,而不是元素数:

Dim monthNames(11) As String
Console.Write(monthNames.Count)

输出为“12”。

Dim monthNames(12) as String
Console.Write(monthNames.Count)

输出为“13”。


我建议你阅读Kathleen Dollard撰写的这篇博文

What a C# Coder Should Know Before They Write VB

她的第一个建议是:

  

1)克服尊重或退出   在你开始之前。 VB.NET很棒   语言。

答案 2 :(得分:3)

VB.Net是.Net语言,它与C#相同,但具有vb风格。 我4年前遇到的情况和你一样,我做的只是用vb.net写作,我很害怕,但是当我开始写作时,我发现我很好,它和C#一样, 就在前几行你会写“;”和“{}”,但几分钟后,你会感觉到它的正常。

所以我的建议是不要觉得你会写VB.Net,你会写.Net但新风格。

您可能需要了解非常简单的部分: 如何写一个函数 如何声明变量 如何创建活动

确保C#和VB.Net之间的差异不仅仅是语法,但你会很快得到它们。

还有一些转换器可以帮助您更快地编码:

Convert VB.Net to C#, C# to VB.Net Tools

答案 3 :(得分:3)

答案 4 :(得分:2)

当我进行类似的切换时,我发现这个小的并排比较特别有用:http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

答案 5 :(得分:2)

My namespace发出特别通知: C#这个术语在某种程度上是遗漏的,所以你可能会错过这个重要的工具。

  

Visual Basic中的My命名空间公开了使您能够轻松利用.NET Framework强大功能的属性和方法。 My命名空间简化了常见的编程问题,通常将困难的任务简化为单行代码。此外,My命名空间是完全可扩展的,因此您可以自定义My的行为并将新服务添加到其层次结构中以适应特定的应用程序需求。

     

提供对信息和常用功能的访问的三个中心My对象是My.Application Object,My.Computer Object和My.User Object。您可以使用这些对象分别访问与当前应用程序,安装应用程序的计算机或应用程序的当前用户相关的信息。

来自Performing Tasks with My.Application, My.Computer, and My.User的示例:

' Displays a message box that shows the full command line for the
' application.
Dim args As String = ""
For Each arg As String In My.Application.CommandLineArgs
    args &= arg & " "
Next
MsgBox(args)

答案 6 :(得分:0)

当我从VB切换到C#时,我发现this引用很方便,我希望它反过来会有所帮助。所以这可能有助于你所经历的过渡的句法部分。肯定不是过渡中最困难的部分,但希望它可以提供帮助。

答案 7 :(得分:0)

+1 for option strict。

我从VB.Net转到C#,最初有点害怕我无法接受它。如果您了解.Net框架就可以了,只需将Google放在任何您不确定的语法上即可。

祝你好运。