为什么我不能从System.Object中提取ushort然后将其作为uint转换?(C#)

JCC*_*CyC 3 c# casting strong-typing

我正在操作列表中的项目System.Management.ManagementObjectCollection.这些项中的每一项System.Management.ManagementObject都包含以字符串索引的属性.看到:

foreach (ManagementObject queryObj in searcher.Get())
{
    string osversion = (string)queryObj["Version"];
    string os = (string)queryObj["Name"];
    uint spmajor = (uint)queryObj["ServicePackMajorVersion"];
    uint spminor = (uint)queryObj["ServicePackMinorVersion"];
    ...
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

每个"字典访问" queryObj返回一个C#object,实际上无论属性是什么 - 我必须事先知道它们的"真实"类型,这没关系.

问题是,我InvalidCastExceptionuint演员阵容中得到了一个.我必须使用真正的类型,这是ushort.演员不ushort应该uint被接受和明显吗?

在这种情况下,我最终会转换值string,但是如果我不得不让他们到什么uintintlong变量?

Rei*_*ica 19

您正尝试取消打开一个ushort,它只能取消装箱到ushort.

一旦你取消装箱,你可以正常投射它.

类型T的任何盒装值只能打包到T(或Nullable).

Eric Lippert在这里发表了一篇关于这个问题的非常好的博文.