is

C#中允许数据在继承链中向下转型,在转换前需要判断数据的类型,可以使用is来判断基础类型。可以这样来理解:若该对象可以非空,且可以强制转换为所提供的类型而不引发异常,则is表达式返回true。使用语法为:

if(obj is objType)
{

}

若obj为null则返回false;

/// <summary>
/// 判断是否为string
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static bool IsString(object data)
{
bool result = false;
if (data is string)
result = true;

return result;
 }

在上述示例中,实际上CLR会对data进行两次类型检查:首先检查data所引用的对象是否和string兼容;若兼容则有if语句内CLR在执行转换时又会检查data是否为string类型的引用。

object dat1="String";
bool result1 = IsString(dat1);
object dat2 = 23;
bool result2 = IsString(dat2);
object dat3 = null;//空数据
bool result3 = IsString(dat3);
Console.WriteLine(result1.ToString());
Console.WriteLine(result2.ToString());
 Console.WriteLine(result3.ToString());

运行结果为

as

在之前一节的类型转换提到了各种类型转换,还有一种转换方式使用as运算符进行转换,as将对象转换为一个特定的数据类型。若转换失败,as运算符会将null值赋给目标,这样就避免了可能因为转型而造成的异常。在msdn有as 的一个经典示例。

class Class1
{
}

class Class2
{
}

class MainClass
{
static void Main()
{
object[] objArray = new object[6];
objArray[0] = new Class1();
objArray[1] = new Class2();
objArray[2] = "hello";
objArray[3] = 123;
objArray[4] = 123.4;
objArray[5] = null;

for (int i = 0; i < objArray.Length; ++i)
{
string s = objArray[i] as string;
Console.Write("{0}:", i);
if (s != null)
{
Console.WriteLine("'" + s + "'");
}
else
{
Console.WriteLine("not a string");
}
}
}
}

运行结果:

代码下载

Related posts:

  1. C#难点逐个击破(9):类型转换 显式转换与隐式转换 类型之间的转换可以分为隐式转换与显式转换,如int类型可直接转换为long类型。             /*隐式转换*/             int intNum = 23;            ...
  2. C#难点逐个击破(2):out返回参数 之前提到ref是将原方法中的参数影响的结果返回到调用它的方法中,out与ref类似,相比之下,ref传递参数的地址,out是返回值。传值(by value)与传址(by reference)分别为普通传递参数方式与ref声明方式,传址方式在使用前需要ref关键词修饰;out为输出返回传递,与ref相同之处较多,其重要区别是在上一节讲到的ref在被引用方法中必须被初始化;out在被引用方法中一定要有返回值。 using System; /******************************  * Chapter:C#难点逐个击破(一)  * Author:王洪剑...
  3. C#难点逐个击破(1):ref参数传递 c#...
  4. C#难点逐个击破(8):可空类型System.Nullable null值用来表示数据类型未被赋予任何值,它是一种引用类型;void表示没有类型,或者说是没有任何值。null与void的区别可以认为 void是根本没有,而null是一个空箱子,里面什么都没有。 null值只能赋值给引用类型,这里注意到string也是一种引用类型;引用类型在C中称为“指针”,即存放变量位置的内存空间位置。将变量设为null,会显式地设置引用,且它本身不指向任何内存位置; null 值赋给值类型将导致编译错误。...
  5. C#难点逐个击破(4):main函数 (貌似我是在写C#的学习笔记哦,不过反正可以利用这个机会来好好温习下基础知识,这其中很多知识点都属于平时视而见的小知识) 还记得读大学时初识计算机编程时的C语言,Main(){},那时还不明白入口函数是什么意思,只知道照抄书本上的示例,一行一行地跑printf看。 在C#中Main()属于主入口函数,我们知识C、C#属于编译语言,可以想象为一段程序最开始的头部部分,由Main()函数进入逐语句进行编译后执行。假如html页面也称作编程语言的话,那么它就属于从上到下一句一句(下载)执行;js也是由上到下执行,不过js相当诡异,变量作用域要特别对待;在asp.net中一般情况下是以Page_Load(object sender,EventArgs e)可以认为是主入口。 Main()中的string[] args参数 Main()函数必须使用static修饰,也就是说它必须是静态的,不可实例化——可以实例化的话程序就完蛋了(多线程!?)。默认的Main()函数是带形式参数的,形如static void Main(string[]...

以上关联文章由 Yet Another Related Posts Plugin 提供支持。