http://www.cnblogs.com/yuanyuan/archive/2012/08/16/2642281.html

写代码的时候经常需要分析已有类型的信息
例如:分析现有类型自动生成类, 或者为现有的类自动增加一些功能
总结了一点点经验
以ClassA  a; 为例
1. 通过typeof(ClassA) 或者 a.GetType() 获取类型信息, 推荐使用typef() 可以避免空引用,而且有的时候不需要构造一个ClassA的实例,
  typeof(ClassA)的性能一点都不差,不要把它和反射混为一谈,
2.对于Type.IsPrimitive来说  很多常见的类型不是原生类型
  例如 String DateTime decimal 都不是原生类型
  按照MSDN的说明  原生类型只包括:http://msdn.microsoft.com/en-us/magazine/bb984984.aspx
3.对于数组来说 , typeof(ClassA [])
  可以使用Type.IsArray来判断是否数组
  可以使用Type.GetElementType 获取元素的类型 , 在这里等价于typeof(ClassA)
  数组实际上继承于System.Array, 但是数组也实现IEnumerable<T>的接口 (这会让数组和List<T>等常见类型可以按照同样的方式处理)
3.泛型来说 ,Typeof(List<ClassA>)
  可以使用Type.IsGenericType 来判断是否是泛型类型
  可以使用Type.GetGenericTypeDefinition()来获取泛型类型(开放类型) ,在这里等价于 typeof(List<>)
  使用Type.GetGenericArguments()获取泛型参数集合 在这里,集合中的第一个元素等价于typeof(ClassA)
  对于Dictionary<string,ClassA> 这样的字典定义来说, Type.GetGenericArugment()会返回两个类型,分别是typeof(string)和typeof(ClassA)  他的开放类型是typeof(Dictionary<,>)
4.可以调用Type.GetInterfaces() 然后判断某个类型是否继承与某个接口
  例如数组和List<T>都继承与IEnumerable<T> 这样就可以用统一的方式处理
5.可空值类型 例如 int? 本质上也是泛型 他的开放类型是typeof(System.Nullable<>)
这里的开放类型指的是类型不完全, 需要增加参数(一般是泛型参数) 才能构成一个真正的类型, 例如List<> , 增加泛型参数string 变为List<string>
开放类型还不是一个完整的类型 不能直接构造出一个实例
封闭类型已经是一个完整的类型了 可以new ..

C#中类型分析中的常见问题 Type - 转的更多相关文章

  1. Python中为什么推荐使用isinstance来进行类型判断?而不是type

    转自:http://www.xinxingzhao.com/blog/2016/05/23/python-type-vs-isinstance.html Python在定义变量的时候不用指明具体的的类 ...

  2. C# 与.NET2.0 中类型Type的GetMethod方法

    C#中类型Type有个GetMethod方法,调用该方法可获取指定方法名的方法信息实例. 使用时,其参数一般为2个,一个是方法名称字符串(可设置条件忽略大小写),另外一个参数为搜索方法的条件枚举. 该 ...

  3. [.NET Core]ASP.NET Core中如何解决接收表单时的不支持的媒体类型(HTTP 415 Unsupported Media Type)错误呢?

    [.NET Core]ASP.NET Core中如何解决接收表单时的不支持的媒体类型(HTTP 415 Unsupported Media Type)错误呢? 在ASP.NET Core应用程序中,接 ...

  4. 《Lucene in Action 第二版》第4章节 学习总结 -- Lucene中的分析

    通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就 ...

  5. Git在Xcode中的配置与使用常见问题总结

    书接上回提出的Git在Xcode中的配置与使用常见问题4个问题 问题1,如何在Xcode中创建代码库,并添加和提交代码到代码库? 问题2,如何在Xcode中提交推送给远程服务器代码库? 问题3,如何在 ...

  6. Vue中computed分析

    Vue中computed分析 在Vue中computed是计算属性,其会根据所依赖的数据动态显示新的计算结果,虽然使用{{}}模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模板中放入太 ...

  7. Guava中EventBus分析

    EventBus 1. 什么是EventBus 总线(Bus)一般指计算机各种功能部件之间传送信息的公共通信干线,而EventBus则是事件源(publisher)向订阅方(subscriber)发送 ...

  8. 谷歌chrome浏览器network中Stalled分析和优化

    谷歌chrome浏览器network中Stalled分析和优化 问题由来 最近项目上要求首页的加载速度,查看浏览器的network发现接口加载速度非常慢. 问题解决思路 SSL 网上有人因为图片加载, ...

  9. 电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析)

    电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析) 目录 电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析) 写在前面 正文 电机噪声 谐波的产生 什么 ...

随机推荐

  1. 跟我一起学习ASP.NET 4.5 MVC4.0(五)(转)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

  2. HDU 4422 The Little Girl who Picks Mushrooms ( 模拟)

    Problem Description It's yet another festival season in Gensokyo. Little girl Alice planned to pick ...

  3. CSS之表格操作

    表格的colspan和rowspan属性参考:http://erpoperator.blog.163.com/blog/static/17899637220123993031921/ colspan是 ...

  4. iOS自定义NavigationBar

    日常开发中少不了用到UINavigationController,但是很多情况都要自定义NavigationBar.依稀记得自己刚开始也踩了好多坑,凑今天有空,就把想到的写下来.有时间了,考虑再把自定 ...

  5. 以莫泰的形式进行页面转换(传值用block)

    1.在第一个页面进入第二个页面可以使用莫泰的方式 在第一个页面包含第二个页面的头文件#import "FirstViewController.h"#import "Vie ...

  6. 【学习笔记】【C语言】赋值运算

    将某一数值赋给某个变量的过程,称为赋值. 1. 简单赋值 C语言规定,变量要先定义才能使用,也可以将定义和赋值在同一个语句中进行 int a = 10 + 5;的运算过程 a = b = 10;的运算 ...

  7. php魔术方法 http_build_query使用

    最近在做一个项目使用到 http_build_query 这个魔术方法很好用,它可以将一个数组转换成这样的格式: 比如 $_arr = array('action'=>'show','page' ...

  8. 6个超炫酷的HTML5电子书翻页动画

    相信大家一定遇到过一些电子书网站,我们可以通过像看书一样翻页来浏览电子书的内容.今天我们要分享的HTML5应用跟电子书翻页有关,我们精选出来的6个电子书翻页动画都非常炫酷,而且都提供源码下载,有需要的 ...

  9. hdu 1879 继续畅通工程

    /************************************************************************/ /* hdu 1879 继续畅通工程 Time L ...

  10. Tomcat找不到service.bat文件

    说明:我们给客户做安装包,Tomcat我们设置了编码和端口,所以用绿色版的,同时又要注册成windows服务.但是bin下面没有service.bat文件(tomcat6.exe,tomcat6x.e ...