为了操作方便,C#也提供了一种is操作符进行转换,十分方便,它自动检查时局是否和类型兼容,并返回结果。而且它不会抛出异常。如果对象引用为null,则is总返回false。
{
Class2 cls2 = (Class2)cls1;
}
else
System.Console.WriteLine( " Error 2! " );
平时自己也多用这种方式来做类型转化的,但今天看了个文章,对比了另外一种方式,as操作符进行转换,才知道as比is可以稍微地提高性能的。
if (cls2 != null )
System.Console.WriteLine( " Ok " );
else
System.Console.WriteLine( " Error! " );
as稍微不同,它检查引用对象是否兼容,如果不兼容则返回null,因此需要做null的判断。
但是應該注意﹐AS只能應用引用類型(string ,class,object)﹐如果應用值類型﹐將會報錯(int,bool,)
对比两种方式,is需要做两次对象的类型检查,而as需要做一次对象类型检查,再加一次null的检查,而null检查开销比对象类型检查少。相对as的方法效率高些。
sizeof 運算符﹕
用來確定堆棧中值類型需要的長度。(字節)
注意﹐2.0以后運用sizeof運算符不在需要使用unsafe模式﹐但是只能用于值類型。
Console.WriteLine(sizeof(int));
Console.WriteLine(sizeof(string));
Console.WriteLine(sizeof(bool));
typeof 運算符﹕返回特定類型的System.Type對象。(可用于反射)
namespace LocalVar
{
class cls
{
static void Main(string[] args)
{
Console.WriteLine(typeof(test));
Console.WriteLine(typeof(t2));
Console.WriteLine(typeof(t3));
Console.WriteLine(typeof(String));
Console.WriteLine(typeof(byte));
}
}
class test
{
}
struct t2
{
}
enum t3
{
}
}
-----〉
LocalVar.test
LocalVar.t2
LocalVar.t3
System.String
System.Byte
請按任意鍵繼續 . . .