我的int变量值为820924
当我试图像这样转换它时:
(uint)data[structure["MICROSECONDS"].Index]
它不起作用
这不起作用
unchecked((uint)data[structure["MICROSECONDS"].Index])
我收到“指定的演员表无效”。异常。
数据存储object
但在运行时我应该尝试转换int
。我几乎可以肯定。我打印的对象值是820924
,但是我不知道如何打印对象类型,但它必须是int。
代码:
object value = data[structure["MICROSECONDS"].Index];
Console.WriteLine("xx MICROSECONDS type " + value.GetType());
Console.WriteLine("xx casting " + value);
Console.WriteLine("xx cast ok" + (uint)value);
结果:
xx MICROSECONDS type System.Int32
xx casting 820924
答案 0 :(得分:36)
首先,您应该检查您的值的类型。您可以通过调用obj.GetType()
方法(直接在代码中或在立即窗口中)来执行此操作。
如果是int
,那么你可以这样做:
uint u = (uint) (int) obj;
请注意,它与您的广告素材不同,因为强制转换到int
然后将转换为uint
,而您正在尝试施放到uint
。 int
无法投放到uint
,这就是您获得InvalidCastException
的原因。 int
只能转换到uint
。令人困惑的是,转换和强制转换运算符在代码中看起来相同:u = (uint) x
。
您可以做的更简单的事情是从Convert
类调用特定方法:
uint u = Convert.ToUInt32(x);
答案 1 :(得分:3)
问题是int
存储为object
。 Int
派生自对象,但uint
并非来自int
,因此您无法将int
存储为object
至uint
。首先,您必须将其转换为int
,然后转换为uint
,因为该转换有效。亲自尝试一下:
object o = 5;//this is constant that represents int, constant for uint would be 5u
uint i = (uint)o;//throws exception
但这有效:
object o = 5;
int i = (int)o;
uint j = (uint)i;
或
object o = 5;
uint i = (uint)(int)o; //No matter how this looks awkward
答案 2 :(得分:1)
如果Index是一个字符串,或者在转换为字符串时具有类似数字的表示,您可以尝试:
UInt32 microSecondsIndex;
if(Uint32.TryParse(data[structure["MICROSECONDS"].Index.ToString()],out microSecondsIndex))
{
//Do Stuff
}
else
{
//Do error handling
}
答案 3 :(得分:0)
Index
属性可能返回String或其他内容。您可以执行以下操作:
var num = Convert.ToUInt32(data[structure["MICROSECONDS"].Index]);
Convert.ToUInt32
重载了可以转换uint
的所有相关类型。