强制转型跟用Convert.ToXXX有什么区别
强制转型和用Convert.ToXXX有什么区别?
例如我有一个float 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是重新封装的 表示他更好用!!!
------解决方案--------------------
的确没什么差别,但是微软怕你写的没有他们好,再者用着也麻烦,于是就集成了这些:
------解决方案--------------------
建议楼主以后进行类型转换都采用微软封装提供的类库函数,这样让程序有更好的容错能力。
例如我有一个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)
{
return (decimal) ((float) value);
}
public static decimal ToDecimal(string value)
{
if (value != null)
{
goto Label_000A;
}
return new decimal(0);
Label_000A:
return decimal.Parse(value, CultureInfo.CurrentCulture);
}
public static decimal ToDecimal(ushort value)
{
return value;
}
public static decimal ToDecimal(uint value)
{
return value;
}
public static decimal ToDecimal(ulong value)
{
return value;
}
public static decimal ToDecimal(object value, IFormatProvider provider)
{
if (value == null)
{
goto Label_0010;
}
return ((IConvertible) value).ToDecimal(provider);
Label_0010:
return new decimal(0);
}
public static decimal ToDecimal(string value, IFormatProvider provider)
{
if (value != null)
{
goto Label_000A;
}
return new decimal(0);
Label_000A:
return decimal.Parse(value, 0x6f, provider);
}
------解决方案--------------------
建议楼主以后进行类型转换都采用微软封装提供的类库函数,这样让程序有更好的容错能力。