首页
学习
活动
专区
圈层
工具
发布

投给Int32
EN

Stack Overflow用户
提问于 2015-03-08 13:00:22
回答 1查看 1.9K关注 0票数 4

我试图从MSNdis_CurrentPacketFilter检索数据,代码如下所示:

代码语言:javascript
复制
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,例如:

代码语言:javascript
复制
Int32 i32 = (Int32)queryObj["NdisCurrentPacketFilter"];

它抛出一个InvalidCastException。为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-08 14:05:34

造成这种情况的原因有三:

  • NdisCurrentPacketFilter的类型是uint,根据this link的说法。
  • 使用索引器queryObj["NdisCurrentPacketFilter"] returns an object,在本例中是boxed uint,它是NdisCurrentPacketFilter的值。
  • 一个装箱的值类型can only被解封为相同的类型,也就是说,您必须至少使用如下所示:
代码语言:javascript
复制
- `(int)(uint)queryObj["NdisCurrentPacketFilter"];` (i.e. a single-line version of what you're already doing), or
- [`Convert.ToInt32`](http://msdn.microsoft.com/en-us/library/23511zys), which uses [`IConvertible`](http://msdn.microsoft.com/en-us/library/system.iconvertible) to perform the cast, unboxing it to `uint` first.

你可以用这样的方法重复你问题中的相同问题

代码语言:javascript
复制
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
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28928393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档