为什么我可以安全地转换为int而不是转换为int?

B. *_*non 3 c# int casting winforms

为什么这样做:

ComboBox cb = sender as ComboBox;
int validSelection = Convert.ToInt32(cb.Tag);
if (cb.SelectedIndex != validSelection) {
    cb.SelectedIndex = validSelection;
}
Run Code Online (Sandbox Code Playgroud)

...但是这个:

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

...错误输出"对象未设置为对象的引用"?

Fré*_*idi 13

那是因为转换与演员不是一回事.

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

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

  • 实际上,cb.Tag被声明为`object`(但在OP的情况下它可能是一个字符串) (4认同)

ken*_*n2k 7

1)Convert.ToInt32(null)总是返回0,如文档中所述

2)您不能将a转换null为a int,int表示数字.Nullable int(int?)允许空值.