C# 将类型对象的值取消装箱到long
我有一个object类型的变量,我想提前把它转换成int 前代码C# 将类型对象的值取消装箱到long,c#,unboxing,C#,Unboxing,我有一个object类型的变量,我想提前把它转换成int 前代码 val = Math.Max(((int)DatabaseHelper.ExecuteScalerCommand(query)), numbering.StartValue); 现在我需要将其转换为long类型。我尝试使用long.tryparse() 是否有更好的方法来处理此问题?尝试使用此方法 long id = Convert.ToInt64(ObjectToConvert) 与数据类型中的TryParse()不同,Tr
val = Math.Max(((int)DatabaseHelper.ExecuteScalerCommand(query)), numbering.StartValue);
现在我需要将其转换为long类型。我尝试使用long.tryparse()
是否有更好的方法来处理此问题?尝试使用此方法
long id = Convert.ToInt64(ObjectToConvert)
与数据类型中的TryParse()不同,TryParse()可能容易出错,例如无效强制转换,TryParse()在无法强制转换值时会处理此问题,它返回0或而不是错误如果我确定它具有长类型,则使用convert.toint64()似乎是安全的,如果您知道
ObjectToConvert
始终具有类型int
,最好使用long id=(int)ObjectToConvert
@JeppeStigNielsen,我同意这一点,但有些时候c#并不总是喜欢这样(int)ObjectToConvert,特别是当对象值来自使用SqlCommand.ExecuteScalar()或SqlCommand.Execute()的数据库时。Jade One应该仔细检查编译时类型和实际运行时类型。例如,解决方案可以是longtt=((SqlInt32)x).Value
类似于longtt=(int)(SqlInt32)x代码>。在我看来,使用Convert
类是个坏主意,除非运行时类型不同。这有什么问题?它不起作用了?它起作用了,但它不干净!我同意删除的答案。如果对象x
保存一个带有int
的框,即如果(int)x
工作并将对象x
解装箱到int
,则正确的操作是(long)(int)x
。但是,最后一次从int
到long
的转换通常是隐式的,如long t=(int)x代码>(与long t=(long)(int)x;
或var t=(long)(int)x;
)相同。
long id = Convert.ToInt64(ObjectToConvert)