C#细节之as和is
判断对象或变量属于某种类型:
一、适用类型
1)is可以判断引用类型和值类型。
2)as可以判断引用类型和可空类型。(注:当值类型变为可空类型时可以用as判断,可以推断可空实际是将值类型进行装箱操作转化为了引用类型)。
二、返回值
1)is返回值为bool型。
2)as返回值为要判断类型。
例1:
class Program
{
static void Main(string[] args)
{
int? i = 0;
string j = String.Empty;
int k = 0;
if (j is int)
{
Console.WriteLine("int");
}
else
{
Console.WriteLine("not int");
}
Other other = new Other();
if (other is Other)
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("No");
}
//int x = k as int;//Error:as不可以用于值类型
int? y = i as int?;//as可以用在可空类型
Console.ReadKey();
}
}
class Other
{
}
例2:
FindControl判断类型时有两种写法:
1)
TextBox txtTmp = XXX.FindControl("txtTmp") as TextBox;
if(txtTmp!=null)
{
txtTmp.Text = "Hello";//操作txtTmp对象
}
2)
TextBox txtTmp = XXX.FindControl("txtTmp") as TextBox;
if(txtTmp is TextBox)
{
txtTmp = (TextBox)XXX.FindControl("txtTmp");
txtTmp.Text = "Hello";//操作txtTmp对象
}
个人推荐第一种写法^=^
一、适用类型
1)is可以判断引用类型和值类型。
2)as可以判断引用类型和可空类型。(注:当值类型变为可空类型时可以用as判断,可以推断可空实际是将值类型进行装箱操作转化为了引用类型)。
二、返回值
1)is返回值为bool型。
2)as返回值为要判断类型。
例1:
class Program
{
static void Main(string[] args)
{
int? i = 0;
string j = String.Empty;
int k = 0;
if (j is int)
{
Console.WriteLine("int");
}
else
{
Console.WriteLine("not int");
}
Other other = new Other();
if (other is Other)
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("No");
}
//int x = k as int;//Error:as不可以用于值类型
int? y = i as int?;//as可以用在可空类型
Console.ReadKey();
}
}
class Other
{
}
例2:
FindControl判断类型时有两种写法:
1)
TextBox txtTmp = XXX.FindControl("txtTmp") as TextBox;
if(txtTmp!=null)
{
txtTmp.Text = "Hello";//操作txtTmp对象
}
2)
TextBox txtTmp = XXX.FindControl("txtTmp") as TextBox;
if(txtTmp is TextBox)
{
txtTmp = (TextBox)XXX.FindControl("txtTmp");
txtTmp.Text = "Hello";//操作txtTmp对象
}
个人推荐第一种写法^=^