Je manipule les éléments dans une liste System.Management.ManagementObjectCollection
. Chacun de ces éléments est un System.Management.ManagementObject
qui contient les propriétés indexées par chaîne. Voir:Pourquoi ne puis-je pas extraire un ushort d'un objet System.Object, puis le transformer en uint? (C#)
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"];
...
...
...
}
Chaque « accès au dictionnaire » à queryObj
retourne un C# object
qui est en fait ce que la propriété est censé être - je dois connaître leur type « réel » au préalable, et c'est OK.
Le problème est, j'obtiens un InvalidCastException
dans les moulages . Je dois utiliser le type réel, qui est ushort
. Est-ce que la distribution de ushort
à uint
ne devrait pas être acceptable et évidente?
Dans ce cas, je vais éventuellement convertir les valeurs à string
, mais si je devais les faire entrer dans uint
ou int
ou long
des variables?
Il y a quelques exceptions à cela, en fait. Celui que je peux me rappeler immédiatement est que vous pouvez déballer une énumération avec un type "int" sous-jacent à int, et vice versa. J'ai été très surpris quand j'ai vu ça pour la première fois. –
Haha, ouais ça sonne surprenant :-) Aussi, Eric a mentionné une autre exception à cette règle, c'est que vous pouvez lancer un Nullable. –
Jon, je démontre probablement un manque de compréhension ici, mais est-ce que les Enums sont encaissés? Si ce n'est pas le cas, je dirais qu'ils ne contreviennent pas à cette règle, car elle ne s'applique qu'aux types encadrés. –