C#中类型分析中的常见问题 Type - 转
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 - 转的更多相关文章
- Python中为什么推荐使用isinstance来进行类型判断?而不是type
转自:http://www.xinxingzhao.com/blog/2016/05/23/python-type-vs-isinstance.html Python在定义变量的时候不用指明具体的的类 ...
- C# 与.NET2.0 中类型Type的GetMethod方法
C#中类型Type有个GetMethod方法,调用该方法可获取指定方法名的方法信息实例. 使用时,其参数一般为2个,一个是方法名称字符串(可设置条件忽略大小写),另外一个参数为搜索方法的条件枚举. 该 ...
- [.NET Core]ASP.NET Core中如何解决接收表单时的不支持的媒体类型(HTTP 415 Unsupported Media Type)错误呢?
[.NET Core]ASP.NET Core中如何解决接收表单时的不支持的媒体类型(HTTP 415 Unsupported Media Type)错误呢? 在ASP.NET Core应用程序中,接 ...
- 《Lucene in Action 第二版》第4章节 学习总结 -- Lucene中的分析
通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就 ...
- Git在Xcode中的配置与使用常见问题总结
书接上回提出的Git在Xcode中的配置与使用常见问题4个问题 问题1,如何在Xcode中创建代码库,并添加和提交代码到代码库? 问题2,如何在Xcode中提交推送给远程服务器代码库? 问题3,如何在 ...
- Vue中computed分析
Vue中computed分析 在Vue中computed是计算属性,其会根据所依赖的数据动态显示新的计算结果,虽然使用{{}}模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模板中放入太 ...
- Guava中EventBus分析
EventBus 1. 什么是EventBus 总线(Bus)一般指计算机各种功能部件之间传送信息的公共通信干线,而EventBus则是事件源(publisher)向订阅方(subscriber)发送 ...
- 谷歌chrome浏览器network中Stalled分析和优化
谷歌chrome浏览器network中Stalled分析和优化 问题由来 最近项目上要求首页的加载速度,查看浏览器的network发现接口加载速度非常慢. 问题解决思路 SSL 网上有人因为图片加载, ...
- 电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析)
电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析) 目录 电机噪声之谐波分析(内附simulink中FFT分析的相关参数配置与解析) 写在前面 正文 电机噪声 谐波的产生 什么 ...
随机推荐
- c# 语法5.0 新特性 转自网络
本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单 async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...
- 七. CSS字体
概述 所谓字体:即文字的形体结构,根据外观字体分不同的类别:衬线字体Serif.无衬线字体sans-serif和等宽字体monospace.每一个类别的字体又可以分成不同的字体族font family ...
- C#反射(转载)
[转]C#反射 反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等. ...
- Git之基本命令
先介绍一下Git: Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.目前, ...
- 通过带参数的Sql语句来实现模糊查询(多条件查询)
#region 通过带参数的Sql语句来实现模糊查询(多条件查询) StringBuilder sb = new StringBuilder("select * from books&quo ...
- XenApp简单部署
作者:MR.Yangwj 目录 XenApp简单部署... 1 一. XenApp安装... 1 (一) 服务器配置任务... 9 1) 许可证服务器配置... 9 ...
- 上传至应用商店以及testflight相关。
对于一个新的开发者账号来说,首先你需要创建一个新的发布证书.这个证书只要创建一次就行了,如果以后用的话,直接拿过来用就行了,当然发布证书是和配置文件一起使用的,还有就是关于p12,就是用创建证书的电脑 ...
- 【学习笔记】【C语言】函数
一. 什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 比如你用C语言编写了一 ...
- UI2_UITableViewDelete
// AppDelegate.m // UI2_UITableViewDelete // // Created by zhangxueming on 15/7/14. // Copyright (c) ...
- MYSQL序言
我写MYSQL的文章主要的原因:我发现网上关于MYSQL的文章比较少,而且很多都是参差不齐,几乎找不到可以比较全面的介绍:例如一篇文章介绍如何增删改查,却没有介绍批量新增:于是下次工作中用到的时候又要 ...