C# 与 VB.Net - 隐式转换

标签 c# .net vb.net

这个问题是关于 VB.Net 和 C# 中的隐式转换。 以下 C# 代码无法编译:

class Program
{
    static void Foo(string s)
    {
        Console.WriteLine(s);
    }

    static void Main(string[] args)
    {
        Foo(3); // Cannot convert from int to string
    }
}

原因是 Foo 需要一个字符串类型的参数,但它给定的是一个 int。一种解决方案是将 Foo(3) 替换为 Foo(3.ToString())。很好。

现在,在 VB.Net 中编写相同的代码:

Module Module1
    Sub Foo(s As String)
        Console.WriteLine(s)
    End Sub

    Sub Main()
        Foo(5)
    End Sub
End Module

编译和运行都很好!

问题:为什么 VB.Net 允许这样做,VB.Net 和 C# 之间是否存在一些根本区别?

最佳答案

编程语言会做出不同的权衡。使用 Strict=Off 的 VB.NET 非常宽松。这是出于历史兼容性原因。

几十年前,编程语言设计者认为这种行为对初学者很有帮助。现在我们知道,这种松懈的行为对于程序的正确性和开发速度来说是可怕的。

JavaScript 也有同样的问题,但更糟。

使用严格的语义。

关于C# 与 VB.Net - 隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561465/

相关文章:

c# - 如何从 List MVC 制作表格?

.net - 在不同级别更改了InotifyPropertyChange的简单MVVM

VB Razor 中 <script> 元素中的 Javascript 代码

c# - Entity Framework skip take by group by

c# - Swagger 按位枚举标志处理

c# - 在 c# 中,我如何通过 SSH2 使用 FTP,最好没有第三方代码

c# - MS Log Parser 2.2 查询错误

c# - 从TCPClient读取问题

c# - 从对象盒类型进行通用转换

c# - .NET OpenFileDialog 是否可以设置为允许用户选择 .lnk 文件