3

であるリスト内のアイテムを操作しています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"];
    ...
    ...
    ...
}

各「辞書アクセス」は、実際にはプロパティが想定されているものでqueryObjある C# を返しますobject。「実際の」型を事前に知っておく必要がありますが、それで問題ありません。

問題は、キャストに a が含まInvalidCastExceptionれていることです。uint実数型を使用する必要がありushortます。ushortfromのキャストはuint受け入れられ、明白であるべきではありませんか?

この場合、最終的に値を に変換しますがstring、それらをuintまたはintまたはlong変数に取得する必要がある場合はどうなるでしょうか。

4

2 に答える 2

19

ushortをボックス化解除しようとしていますが、ボックス化解除できるのは ushort だけです。

箱から出したら、通常どおりキャストできます。

タイプ T のボックス化された値は、T (または Nullable) にのみボックス化を解除できます。

Eric Lippert は、これとまったく同じことについて、非常に優れたブログ投稿を行いました

于 2009-07-03T21:49:09.683 に答える