C# (长)值和Convert.ToInt64(值)之间的差异

C# (长)值和Convert.ToInt64(值)之间的差异,c#,casting,dataset,long-integer,C#,Casting,Dataset,Long Integer,我有一个过程,它将值从数据库获取到一个数据集,然后将其复制到一个本地long-typed变量。它总是包含长值 这就是我将值从数据集复制到变量的方式 AreaId = dsTable.SearchedTable[I].IsAreaIdNull() ? 0 : (long)dsTable.SearchedTable[I]["AreaId"]; 有时它工作正常,但有时它给我错误 特定强制转换无效 然后我必须把所有这些转换转换成这种格式 AreaId = dsTable.SearchedTable[

我有一个过程,它将值从数据库获取到一个数据集,然后将其复制到一个本地
long-typed
变量。它总是包含
长值

这就是我将值从数据集复制到变量的方式

AreaId = dsTable.SearchedTable[I].IsAreaIdNull() ? 0 : (long)dsTable.SearchedTable[I]["AreaId"];
有时它工作正常,但有时它给我错误

特定强制转换无效

然后我必须把所有这些转换转换成这种格式

 AreaId = dsTable.SearchedTable[I].IsAreaIdNull() ? 0 : Convert.ToInt64(dsTable.SearchedTable[I]["AreaId"]);

(long)对两种方法及其65具有相同的值时,我很困惑(long)有什么问题。我在这里遗漏了什么???

将相关语言添加到标记中会很有用。@OskarHýbl It C#。标记添加当从一种值类型转换到另一种值类型时,显式定义的运算符在编译时确定,但是如果您有一个对象,则无法知道要应用哪个转换运算符。如果该值为long,则一切正常,否则应强制转换为特定类型或使用
Convert.ToInt64
。在您的情况下,返回值可能会沿着某个地方的检索路径向下调整为“正常”int。这在许多情况下都可能发生。例如,假设一个join/coalesce/isnull sql方法,但它可以很好地处理其他值。即使在这种特定情况下,有时它也可以正常工作,有时它会在强制转换之前在
对象
中缓冲值,并在其中放置一个
断言
<代码>Debug.Assert(obj很长,“很长”)将相关语言添加到标记中会很有用。@OskarHýbl其C#。标记添加当从一种值类型转换到另一种值类型时,显式定义的运算符在编译时确定,但是如果您有一个对象,则无法知道要应用哪个转换运算符。如果该值为long,则一切正常,否则应强制转换为特定类型或使用
Convert.ToInt64
。在您的情况下,返回值可能会沿着某个地方的检索路径向下调整为“正常”int。这在许多情况下都可能发生。例如,假设一个join/coalesce/isnull sql方法,但它可以很好地处理其他值。即使在这种特定情况下,有时它也可以正常工作,有时它会在强制转换之前在
对象
中缓冲值,并在其中放置一个
断言
<代码>Debug.Assert(obj很长,“很长”)