C#,在下一个版本中类型转换是否会改进?

C#,在下一个版本中类型转换是否会改进?,c#,C#,人们普遍认为C#和VB.net或多或少是完全相同的东西。但是,如果您同时使用这两种语言进行开发,您会注意到VB.net在类型转换方面要宽容得多 举个例子 int someInt = 5; string someString = "12345"; someString.Replace(someInt, ""); 上述代码将失败,但如果替换为: int someInt = 5; string someString = "12345"; someString.Replace(Convert

人们普遍认为C#和VB.net或多或少是完全相同的东西。但是,如果您同时使用这两种语言进行开发,您会注意到VB.net在类型转换方面要宽容得多

举个例子

int someInt = 5; 
string someString = "12345"; 
someString.Replace(someInt, ""); 
上述代码将失败,但如果替换为:

int someInt = 5; 
string someString = "12345"; 
someString.Replace(Convert.ToString(someInt), "");
更新

更好的例子:

Dim i As Integer = 1
Dim j As String = "1"
If i = j Then
    MessageBox.Show("Bad comparison")
End If
VB.net更加宽容,不需要您到处输入cast

所以我的问题是:这种显式类型转换在C#的未来版本中仍然需要,还是编译器能够自动确定需要哪些类型。这是否意味着VB.net更先进(因为它已经自然地为您进行了这种类型转换),或者这是否意味着VB.net更容易出现错误代码,或者在幕后到处使用对象


提前感谢…

对不起,我只是用我的默认设置尝试了你刚才在vb.net中所说的,它不起作用,我还需要将5转换为字符串

默认设置为

选项在
选项严格限制在
选项推断

我可以接受推断关,但决不能接受明确或严格关。从来没有

这两个函数在关闭时给vb/asp/vbs/etc起了一个很坏的名字,你想把它写进C#吗

编辑

用你的新例子,我得到了这个错误

错误1选项Strict On不允许从“String”到“Double”的隐式转换。C:\Documents and Settings**\Local Settings\Application Data\Temporary Project\ConsoleApplication1\Module1.vb 6 16 ConsoleApplication1


在C#的未来版本中,为铸造设置的规则可能不会改变。在这两种情况下,这并不意味着一种语言比另一种语言更高级,因为一种语言可能需要更少的强制转换。正如Fredou所提到的,您可能为vb.net启用了非严格设置,在某些情况下(如您所提到的)会使用后期绑定对象


也就是说,如果您喜欢vb.net语法和类型系统,那么请务必使用它:-p这是一种完整的CLR语言,因此您可以与所有其他语言进行互操作,而不会出现任何问题

不要进行显式转换,您的代码可能会有更多错误。在某些情况下,您不会意识到该类型已转换为其他类型,这是不好的


我认为幕后的double是通过从double(从System.Object继承的方法)调用ToString()方法转换为string的。

强制您转换为string是有原因的。没有唯一的方法将数字转换为字符串。想象一下,如果你把一个双精度转换成一个字符串,你可以在小数点后加两位数字,或者不加小数点,这些数字会给你不同的字符串

对于整数,我理解您的沮丧,因为Convert.ToString(int)将返回大多数人都同意的结果,即将整数转换为字符串

但有人可能会说,你想让领先的“0”排在前面。 5可能是0005 4可能是0004 ... 等


强制人们使用转换运算符/函数,这些运算符/函数使用的是您的区域设置并具有独特的定义,这将减少大型项目中的bug数量。

“人们普遍认为C#和VB.net或多或少是完全相同的东西”,嗯?我不记得同意过这个!在实现中,所有.NET编程语言共享相同的运行时引擎、统一的抽象语法树和公共中间语言本身没有多大意义,因为您忽略了方法调用的结果。我假设您打算编写
stringresult=someString.Replace(someInt,”)。好的-这就是原因。。。很好,所以它真的与语言无关。。。很高兴知道谢谢:)基于此,我认为让新的VB.net开发人员启用所有这些选项是一个好主意,如果以后需要的话,这将更好地为过渡到C做好准备。这不应该是一个选项。必须有这些选项ON@Fredou:我完全同意,不过他们是微软“非官方”的Vb.net的一部分。所有的证据都指向某个地方的某个人(我向你保证不是我)决定真正的程序员使用C#,而精神上不受重视的人使用VB.net。我同意,在新项目中,默认情况下应该启用严格的键入,只有在有充分理由的情况下,才可以关闭它们。