C#中Cast和Convert之间的区别

时间:2010-12-20 00:30:11

标签: c# decimal

我有一个sql datareader ...我必须从中获取一个十进制值。

之间有什么区别
  1. (十进制)的DataReader [ “百分比”]
    1. Convert.Todecimal(DataReader的[ “百分比”])
    2. 两种方法的prons和cos ....是什么。

5 个答案:

答案 0 :(得分:11)

仅当datareader["percent"]返回的对象属于Decimal类型时,转换才会成功。当对象属于可转换为Decimal的任何类型时,转换将成功。这包括intlongshort等。或者更一般地说,任何实现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”]索引器语法。我不知道它是否会为你带来任何性能,但它可以在不使用转换或铸造的情况下为您提供类型安全。