这个问题是关于 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/