我有一个sql datareader ...我必须从中获取一个十进制值。
之间有什么区别
和
两种方法的prons和cos ....是什么。
答案 0 :(得分:11)
仅当datareader["percent"]
返回的对象属于Decimal
类型时,转换才会成功。当对象属于可转换为Decimal
的任何类型时,转换将成功。这包括int
,long
,short
等。或者更一般地说,任何实现IConvertible
并从IConvertible.ToDecimal()
返回有用值的内容都可以传递给{ {1}}。
例如:
Convert.ToDecimal()
答案 1 :(得分:3)
我不知道十进制具体,但我知道对于整数转换轮而铸造截断,即(int)7.6为7,Convert.ToInt32(7.6)为8.不直接适用于你的例子,但是好的记住。
答案 2 :(得分:0)
修改强>
Casting说对象是类型(或衍生物)。转换说虽然它可能不是那种类型或衍生物,但是存在一种转入目的地类型的方法。
e.g。
string a = "1234";
object b = a;
// success, a is really a string
string c = (string)b;
// fails because b is not actually an int
int d = (int)b;
// success because there is way to convert the numeric string to an int
int e = Convert.ToInt32(b);
编辑:好点@cdhowie,弗洛伊德滑倒。这应该是更具描述性的
答案 3 :(得分:0)
第一个((decimal)datareader["percent"]
)是显式转换(强制转换)。它的作用是使编译器将目标值(datareader["percent"]
)解包或转换为decimal
。这将导致InvalidCastException
,除非datareader["percent"]
是decimal
或框decimal
。
第二个运行代码,它是.NET的一部分,用于检查对象datareader["percent"]
的类型,并尝试以适当的方式将其转换为decimal
。如果值是任何类型的数字(例如int
),则会成功。
答案 4 :(得分:0)
这里有几个很好的答案,但是既然你提到了一个SqlDataReader,你就得到了GetDecimal()方法,而不是使用reader [“columnName”]索引器语法。我不知道它是否会为你带来任何性能,但它可以在不使用转换或铸造的情况下为您提供类型安全。