强制转换有如下两种形式:
1.
object o = "1";
string s = (string)o;2.
object o = "1";
string s = o as string;问一下,这两种有无区别?或你更习惯哪一种?
1.
object o = "1";
string s = (string)o;2.
object o = "1";
string s = o as string;问一下,这两种有无区别?或你更习惯哪一种?
用 as 方法则会相对平稳 当 obj 的运行时类型不是 string 时会返回 null 而不抛出异常。
等效于
expression is type ? (type)expression : (type)nullhttp://msdn.microsoft.com/zh-cn/library/cscsdfbt(VS.80).aspx
第一种转化失败时报错
第二种不能转化时得到null不推荐发红包时还带干活的
第2种在转换不成功的时候不会包异常,只会返回null
但是第一个会包异常
string s = (string)o;这种比较通用。unbox
强制类型转换
as进行类型转换时的机制:它会检查对象的运行时类型,是否是期待类型或者期待类型的派生类型,如果是,就进行转换;如果不是,就返回null。对于null来说,它通过as转换为任何类型后,依然是null,并不会产生异常。as并不会执行用户自定义的类型转换。
强制类型转换的机制:它使用转换操作符来进行类型转换的工作,它会执行.NET框架自带的类型转换机制或者用户自定义的类型转换。就会有转换成功,但是转换后结果不正确的情况,例如将float强行转换成int,就可能会丢失一些信息。
如果输入参数肯定是string类型的话,第一种跟第二种是没区别的。
如果输入不定时string,那么第一种强制转换的时候失败会抛出异常,第二种则返回一个空的引用。
具体的楼上dada说的很详细。
我只是想补充一点儿:
as运算符跟is运算符有些像。
对象转换时,使用as运算符转换成功返回对象引用,失败时返回空引用。
is运算符,类型兼容时返回true,不兼容返回false
比 ((Label)Repeater1.Items.FindControl("Label1")).Text个人认为优雅些
1.
object o = "1";
string s = (string)o;
第一种的有可能会报错
2.
object o = "1";
string s = o as string;
//这个应该还缺个
if(o!=null)
{}
第2种在转换不成功的时候不会包异常,只会返回null
但是第一个会包异常
1.
object o = "1";
string s = (string)o;
------------------------------
我用第一种 就是习惯而已。
IS 需要判断类型.
AS 需要判断NULL.
object o="1"
string i=o.ToString();
2、
object o="1"
string i=Convert.ToString(o);请指教