[ C# ] as 和 is 比较
is 运算符判断对象是否是某特定类型,返回值为true或者false。
string s = "a string"; Trace.Assert(s is string); Trace.Assert(s is object);
2 as 运算符
尝试将对象转换为一个特定的数据类型,如果失败,将null赋值给目标.
在一个继承链上向上或向下转换为支持转型运算符的类型.
object o = "1"; string s = o as string; int? ii = o as int?; Trace.Assert(s != null); Trace.Assert(ii == null); Trace.Assert(sss is string);class C { public override string ToString() { return base.ToString(); } public static implicit operator string(C c ) { return c.ToString(); } }一定要注意是在继承链上进行转换,下面的代码无法通过编译 C c = new C(); string s = c as string; //will not pass the compilation//错误为:无法通过引用转换、装箱转换、取消装箱转换、包装转换或 Null 类型转换将类型“C”转换为“string”
可修改为以下形式:
object c = new C(); Trace.Assert(c as string == null);