c# - 为什么我可以安全地转换为 int 而不能转换为 int?

标签 c# winforms casting int

为什么这样做:

ComboBox cb = sender as ComboBox;
int validSelection = Convert.ToInt32(cb.Tag);
if (cb.SelectedIndex != validSelection) {
    cb.SelectedIndex = validSelection;
}

...但是这个:

ComboBox cb = sender as ComboBox;
int validSelection = (int)cb.Tag; // <-- fails
if (cb.SelectedIndex != validSelection) {
    cb.SelectedIndex = validSelection;
}

...错误提示“对象未设置为对象的引用”?

最佳答案

那是因为a conversion is not the same thing as a cast .

cb.Tag 可能是一个 string,而不是一个 int,并且不能直接转换为另一个。 Convert.ToInt32() 实际上解析 string 并使用转换后的值创建一个新的 int

强制转换仅尝试将一种类型的实例解释为另一种类型的实例。

关于c# - 为什么我可以安全地转换为 int 而不能转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11550139/

相关文章:

c# - 使用 css 和 c# 在母版页中以编程方式更改链接

c# - 如何在 C# WinForms 应用程序中创建可编辑的配置设置?

c++ - C 风格的转换是否与函数风格的转换相同?

java - 列表<Map>到对象[]

c# - 50级灰度

c# - 性能: Lots of queries or lots of processing?

c# - 仅限英文字符

kotlin - Kotlin 中的重载强制转换运算符

c# - 向WPF中的用户报告错误的简单方法?

c# - 如何防止 DGV 隐藏顶行?