日期:2014-05-17  浏览次数:20932 次

强制转型和用Convert.ToXXX有什么区别?
例如我有一个float f;
然后

decimal d=(decimal)f;



decimal d=Convert.ToDecimal(f);

会有什么行为或者效果上的差异吗?

如果没有的话,还要整出来一个Convert.ToXXX做什么用呢?

------解决方案--------------------

bool b = true;
var a = Convert.ToDecimal(b);
这个你通过decimal d=(decimal)f;转不了吧。
Convert.ToDecimal有18个重载,并不是所有的都能通过decimal d=(decimal)f来强转
------解决方案--------------------
前者是显式类型转换,这是C#的转换方法,是C#语言的基本语法。 
而Convert.Toxxxx()是.Net的转换方法,是.Net类库支持的。 

也就是说第一种在C#中可以用,与.Net类库没有关系。 
第二种可以在.Net下的任何语言中用,比如C#,VB,都适用,但是需要.Net类库的支持。
------解决方案--------------------
Convert是重新封装的 表示他更好用!!!
------解决方案--------------------
的确没什么差别,但是微软怕你写的没有他们好,再者用着也麻烦,于是就集成了这些:

public static decimal ToDecimal(bool value)
{
    return ((value != null) ? 1 : 0);
}
public static decimal ToDecimal(byte value)
{
    return value;
}
public static decimal ToDecimal(char value)
{
    return ((char) value).ToDecimal(null);
}
public static decimal ToDecimal(DateTime value)
{
    return ((DateTime) value).ToDecimal(null);
}
public static decimal ToDecimal(decimal value)
{
    return value;
}
public static decimal ToDecimal(double value)
{
    return (decimal) ((double) value);
}
public static decimal ToDecimal(short value)
{
    return value;
}
public static decimal ToDecimal(int value)
{
    return value;
}
public static decimal ToDecimal(long value)
{
    return value;
}
public static decimal ToDecimal(object value)
{
    if (value == null)
    {
        goto Label_0010;
    }
    return ((IConvertible) value).ToDecimal(null);
Label_0010:
    return new decimal(0);
}
public static decimal ToDecimal(sbyte value)
{
    return value;
}
public static decimal ToDecimal(float value)
{
    retu