为什么ConvertTo工作,但在某些情况下铸造失败?

Ser*_*pia 1 c# casting

我总是很好奇.

为什么这样做:

double Number = Convert.ToDouble(TextBox1.Text);
Run Code Online (Sandbox Code Playgroud)

但这不是:

double Number = (double)TextBox1.Text;
Run Code Online (Sandbox Code Playgroud)

Mat*_*eer 6

只有在类型之间存在显式强制转换时才能进行强制转换.没有从字符串到double的显式强制转换.Convert.ToDouble不是强制转换,它正在解析字符串并尝试将其转换为double.请注意,例如,它无法保证成功Convert.ToDouble("Hello there")


Jos*_*osh 5

我想你要问的是......

当我在IDE中键入以下代码行时:

double Number = (double)TextBox1.Text;
Run Code Online (Sandbox Code Playgroud)

为什么编译器无法将其隐式转换为:

double Number = Convert.ToDouble(TextBox1.Text);
Run Code Online (Sandbox Code Playgroud)

这里的问题是您使用的是显式强制转换.你真正对编译器说的是......

虽然我将这块内存声明为X,但我希望你把它当成Y.编译器很聪明,知道它是否可以完成.由于您尝试转换的内存块是System.String,因此编译器知道没有可能的方法将其视为System.Double.

静态Convert方法以编程方式解析值并在所需类型的内存中创建一个全新的值,而不是简单地在内存中使用相同的字节,就好像还有其他东西一样.