C#如何获取某个对象的类型,以及GetType()与typeof()的区别

C#如何获取某个数据的类型

前言:在学习枚举类型之间的转换时,有时候我们不知道是否转换成我们想要的类型,所以就需要获取转后的类型。但是我也会技术小白,所以就查阅的相关的资料文献,将自己查阅总结的3种方法分享给大家,希望对读者能有一些帮助。

1、使用GetType( )方法

先了解一下GetType( )方法

在这里插入图片描述
​ 1、从图中可以得知Tyoe在英语中是类型的意思。在C#中GetType()方法继承自Object(对象),也就是说类型来自于对象,换句话说C#中的任何对象都具有GetType( )方法。
在这里插入图片描述
​ 2、那么,GetType( )方法如何使用呢?从图中可以看出这个方法的意思是说获取当前实例的类型,也就是说对象必须初始化之后才能调用,正确使用这个方法。

例子:

 enum  Week//声明一个Week,是枚举类型
    {
        星期一,
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期七,
    }
string st1 = "星期二";//定义一个字符串
int[] a = { 0, 1, 2 };//定义一个int类型的数组
double b = 2;//定义一个双精度浮点型的变量并赋值
Console.WriteLine(a.GetType());//获取数组a的类型
Console.WriteLine(b.GetType());//获取变量b的类型
Console.WriteLine(((Week)Enum.Parse(typeof(Week),st1)).GetType());//将字符串字转换为定义好枚举类型Week,使用GetType方法来打印出它的类型,来判断转换后的类型是否是枚举类型Week

输出结果:

在这里插入图片描述


2、使用typeof()方法来判断

(1)首先要使用**GetType()**方法来获取对象的类型

(2)然后再通过**typeof()**来判断是否是这个类型

先来了解一下typeof( )

在这里插入图片描述
​ 1、返回一个类的类型,类中的类型有很多呀,比如整型、浮点型、枚举类型、字符串类型……等,换句话说typeof括号中填写什么类型,就返回什么类型。

​ 2、要注意的是,typeof()不能返回返回当前对象实例的类型,也就是说,只能填写类型名称,而不能写初始化后的变量名称。
在这里插入图片描述
例子:

string st1 = "星期二";
int[] a = { 0, 1, 2 };
double b = 2;
Week week = Week.星期七;
 if (a.GetType() == typeof(Int32[]))//判断数组a是否是int32[]类型
 {
    Console.WriteLine("是int32数组类型");
 }
 else
 {
     Console.WriteLine("不是int32数组类型");
 }
     if (b.GetType() == typeof(Double))//判断双精度浮点型b是否是Double类型
{
     Console.WriteLine("是Double类型");
}
else
{
     Console.WriteLine("不是Double类型");
}
if (((Week)Enum.Parse(typeof(Week), st1)).GetType() == typeof(Week))//将字符串转换为Week枚举类型,并获取枚举Week的类型,判断是否是枚举Week的类型
{
   	Console.WriteLine("是Week枚举类型");
}
else
{
     Console.WriteLine("不是Week枚举类型");
}

输出结果:
在这里插入图片描述
*其实总结到这里**GetType( )typeof( )*的区别已经出来了,但是我还是想给大家总结一下


3、**GetType( )typeof( )**的区别

​ (1)GetType( )方法继承自Object,所以C#中的任何对象都具有GetType( )方法,x.GetType,其中x是具体的变量名称,就是初始化后的类型变量名称

​ (2)**typeof(x)**中的x,必须是具体的类名、类型名称等,绝对不可以是变量名称


4、使用is关键字

先了解一下is关键字

is关键字是判断类型,用于检查对象是否与给定的类型兼容,不成功则不会抛出异常。如果兼容返回true,不兼容则返回false。其实呢大致意思就是说主要用来对类型的判断。

格式:

[——要判断的对象——] is [——要判断的数据类型——]

​ is前边是要判断的对象,is后边是判断的数据类型。其实它本身就是可以返回true和fale的,但是,为了直观一点,我使用if的形式给大家看。

例子:

 		   string st1 = "星期二";
            int[] a = { 0, 1, 2 };
            double b = 2;
            Week week = Week.星期七;
            if (a is Int32[])//判断数组a是否是int32类型的数组
            {
                Console.WriteLine("是int32数组类型");
            }
            else
            {
                Console.WriteLine("不是int32数组类型");
            }
            if (b is Double)//判断b是否是双精度浮点类型
            {
                Console.WriteLine("是Double类型");
            }
            else
            {
                Console.WriteLine("不是Double类型");
            }
            if ((Week)Enum.Parse(typeof(Week), st1) is Week)//将字符串转换为Week枚举类型,并判断是否是Week枚举类型
            {
                Console.WriteLine("是Week枚举类型");
            }
            else
            {
                Console.WriteLine("不是Week枚举类型");
            }
            

输出结果入下

在这里插入图片描述


小结:本篇文章主要针对获取对象的数据类型进行讲解,其次就是对GetType( )与typeof( )的区别进行讲解。以上都是本人在学习中总结的一些知识点,如果文章某处有什么瑕疵,还请各位技术大佬能够指点迷津,也希望能够帮助到更多的技术小白,谢谢!

  • 17
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御弟謌謌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值