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

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

1、使用GetType( )方法

先了解一下GetType( )方法

Typescript 根据对象获取对象类型 获取对象的类型_数组


1、从图中可以得知Tyoe在英语中是类型的意思。在C#中GetType()方法继承自Object(对象),也就是说类型来自于对象,换句话说C#中的任何对象都具有GetType( )方法。

Typescript 根据对象获取对象类型 获取对象的类型_c#_02


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

输出结果:

Typescript 根据对象获取对象类型 获取对象的类型_枚举类型_03


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

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

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

先来了解一下typeof( )

Typescript 根据对象获取对象类型 获取对象的类型_枚举类型_04


1、返回一个类的类型,类中的类型有很多呀,比如整型、浮点型、枚举类型、字符串类型……等,换句话说typeof括号中填写什么类型,就返回什么类型。 2、要注意的是,typeof()不能返回返回当前对象实例的类型,也就是说,只能填写类型名称,而不能写初始化后的变量名称。

Typescript 根据对象获取对象类型 获取对象的类型_数组_05


例子:

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枚举类型");
}

输出结果:

Typescript 根据对象获取对象类型 获取对象的类型_数组类型_06


*其实总结到这里**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枚举类型");
            }

输出结果入下

Typescript 根据对象获取对象类型 获取对象的类型_枚举类型_07


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