我正在尝试从 MSNdis_CurrentPacketFilter
检索数据,我的代码如下所示:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI",
"SELECT NdisCurrentPacketFilter FROM MSNdis_CurrentPacketFilter");
foreach (ManagementObject queryObj in searcher.Get())
{
uint obj = (uint)queryObj["NdisCurrentPacketFilter"];
Int32 i32 = (Int32)obj;
}
如您所见,我将从
NdisCurrentPacketFilter
接收到的对象转换两次 ,这就引出了一个问题: 为什么是 ??如果我尝试将其直接转换为
int
,例如:Int32 i32 = (Int32)queryObj["NdisCurrentPacketFilter"];
它抛出一个
InvalidCastException
。这是为什么? 最佳答案
三件事导致这对您不起作用:
NdisCurrentPacketFilter
的类型是 uint
。 queryObj["NdisCurrentPacketFilter"]
returns 和 object
,在本例中是 boxed uint
,即 NdisCurrentPacketFilter
的值。 (int)(uint)queryObj["NdisCurrentPacketFilter"];
(即你已经在做的单行版本),或 Convert.ToInt32
,它使用 IConvertible
执行转换,首先将其拆箱为 uint
。 您可以使用类似的方法重现与您的问题相同的问题
object obj = (uint)12345;
uint unboxedToUint = (uint)obj; // this is fine as we're unboxing to the same type
int unboxedToInt = (int)obj; // this is not fine since the type of the boxed reference type doesn't match the type you're trying to unbox it into
int convertedToInt = Convert.ToInt32(obj); // this is fine
关于c# - 将 uint 转换为 Int32,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28928393/