C# 将类型对象的值取消装箱到long

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

我有一个object类型的变量,我想提前把它转换成int

前代码

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)