zhuweisky
君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。
ESFramework,基于.NET的通信框架。DataRabbit,轻量的数据访问框架。sky.zhuwei@163.com
posts - 191, comments - 1276, trackbacks - 94, articles - 1
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
你知道 typeof(void) 吗?
Posted on 2008-05-21 10:31
zhuweisky
阅读(3409)
评论(17)
编辑
收藏
所属分类:
C#专栏
void
也是.NET中的一种类型,只不过在C#中看不到“System.VOid”这种Type,而在IL这一层是可以看到的。
如果我们要通过反射判断一个方法是否有返回值,比较直观的解决办法好像是这样:
MethodInfo
originMethod
=
;
if
(originMethod.ReturnType
!=
null
)
{
//
}
然而运行后,你会发现,在任何情况下,originMethod.ReturnType的值始终不会为null,即使originMethod没有返回值--这种情况下,originMethod.ReturnType的结果是
typeof(void)
。所以,改成如下的方式即可:
MethodInfo
originMethod
=
;
if
(originMethod.ReturnType
!=
typeof
(
void
)
)
{
//
}
void类型和其他Type一样,是一种IL的基本类型。在反射或使用Emit动态生成程序集时要特别注意这一点。
Feedback
#1楼
回复
引用
查看
2008-05-21 10:36 by
Franz
好像以前看到过关于void类型的介绍。
这个问题的确很容易出错!
#2楼
回复
引用
查看
2008-05-21 10:40 by
Zhuang miao
掌握了个小知识
#3楼
回复
引用
查看
2008-05-21 10:45 by
Gray Zhang
就是System.Void,有一次不知怎么就弄出来了,编译器提示要用关键字void而不是System.Void
#4楼
回复
引用
查看
2008-05-21 10:54 by
henry
原来是typeof(void)而不是typeof(System.Void)...
结果最后用string来比较
#5楼
回复
引用
查看
2008-05-21 10:56 by
王孟军!
挺好
#6楼
回复
引用
查看
2008-05-21 11:34 by
瑞克梅塔
学习了
#7楼
回复
引用
查看
2008-05-21 11:34 by
玉开
xiexie
#8楼
回复
引用
查看
2008-05-21 12:40 by
alisx
好,知道了
#9楼
回复
引用
查看
2008-05-21 12:57 by
→遇建←
受教了。
#10楼
回复
引用
查看
2008-05-21 17:19 by
aspnetx
受教了
#11楼
回复
引用
查看
2008-05-21 17:39 by
John Rambo
Worth to read.
#12楼
回复
引用
查看
2008-05-21 19:47 by
Q.Lee.lulu
学习了!!
#13楼
回复
引用
查看
2008-05-22 00:15 by
啊不才
Console.WriteLine(typeof(void));
得到是System.Void
#14楼
回复
引用
查看
2008-05-22 00:18 by
黃偉榮
学习了
#15楼
回复
引用
查看
2008-05-22 10:14 by
Klesh Wong
好
#16楼
回复
引用
查看
2008-05-22 11:27 by
隐姓埋名
恩! 不错!
#17楼
回复
引用
查看
2008-05-22 19:32 by
李涛
解决一个小虫子,不错
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索
相关链接:
所属分类的其他文章:
Spring.net -- 目前不支持getter、setter的访问限定符
你知道 typeof(void) 吗?
【C#2.0】发挥匿名委托的威力!
动态代理DynamicProxy 介绍
当泛型的参数类型是动态的...
复制SqlServer数据库
注解:System.Threading.Timer
自动化 object <-> xml
使用Null Object设计模式
反射中使用 BindingFlags.IgnoreCase
最新IT新闻:
Facebook创始人:信息共享或存摩尔定律
微软承认Vista用户账户控制功能有问题
资本寒冬侵袭中国视频网站 营销春天或不远
金融风暴波及全球创业板 中国概念股难独善其身
携程范敏:CEO从接发传真做起
Powered by:
博客园
Copyright © zhuweisky
日历
<
2008年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
公告
 
气度影响格局
性格决定命运
  正在阅读的书籍:
与我互动
给我发短消息
搜索
留言簿
(63)
给我留言
查看私人留言
随笔分类
(192)
C#专栏(37)
DataRabbit(19)
DTS(11)
Emit(7)
ESFramework(54)
sky随笔(11)
Strive Game Engine(2)
Web开发(6)
分布式(12)
高性能(1)
管理实践(7)
技术随笔(15)
系统架构/EAI、SOA(10)
随笔档案
(191)
2008年9月 (6)
2008年8月 (2)
2008年6月 (2)
2008年5月 (5)
2008年4月 (4)
2008年3月 (1)
2007年12月 (1)
2007年11月 (2)
2007年9月 (2)
2007年8月 (3)
2007年7月 (1)
2007年6月 (1)
2007年5月 (2)
2007年4月 (6)
2007年3月 (17)
2007年2月 (1)
2007年1月 (1)
2006年12月 (3)
2006年11月 (4)
2006年9月 (5)
2006年8月 (2)
2006年7月 (9)
2006年6月 (6)
2006年5月 (19)
2006年4月 (18)
2006年3月 (27)
2006年2月 (4)
2006年1月 (4)
2005年12月 (10)
2005年11月 (2)
2005年10月 (1)
2005年9月 (20)
收藏夹
(20)
ASP.Net(5)
Java技术(3)
Linux(4)
SOA(1)
UML(1)
安全(2)
高级.NET(2)
历史(2)
好友博客
Donald
Ivan Zou
wwp
嘟嘟的博客
技术网站
C#3.0
CodeDOM
CodeProject
CSharpCorner
Linux时代
博客堂
寸锐斋
优秀blog专栏
BlueDavy Java
Don Box
mulder 的程序人生
shanyou
跋涉前行-P2P的思考与探索
寸锐斋
故步自封
花钱的年华
李维
梦想风暴
思归呓语
透明思考
王垠blog
云风
积分与排名
积分 - 461967
排名 - 44
最新评论
1. re: .NET Remoting与双网卡
<channel ref="tcp" port="9000" bindto="ip地址" >
--小徐小
2. re: 反射中使用 BindingFlags.IgnoreCase
thx for help
--amingo
3. re: ESFramework3.0 Demo源码
跟ESF一起成长了两年,一直想用ESF做点东西,可是那是不现实的,ESF只是一个很空的框架,框架都算不上只能说是思想或是秀招,完全不能实战的东西。本来花了很多精力写些插件,但这次跟微软合作,我真的只花...
--冰品羽扇
4. re: 【Emit基础】在IL中进行异常处理
这一系列文章挺好,就是每篇的内容少了点
--Terry Sun
5. re: 【Emit基础】在IL中进行异常处理
看看
--hahahehe
6. re: .NET Remoting与双网卡
我觉得这种做法不是很好,最好是使用bindTo属性绑定一个网卡 MSDN上这样说的 machineName:指定用于当前信道的计算机名称的字符串。如果用于服务器信道,则重写 useIpAddress。...
--wuqiubin
7. re: 【Emit基础】调用Tostring()方法的IL表示
@Q.Lee.luluEmit是dotnet的一种很强大的功能。你可以用它在运行时生成代码。你可以在System.Reflection.Emit下面找到关于它的类和方法。使用Emit的前提是必须了解I...
--胖胖de程序员
8. re: 【Emit基础】调用Tostring()方法的IL表示
Emit是啥 ?
--Q.Lee.lulu
9. re: System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
这个问题,一般是由于某些地方存在 内存泄漏引起(不是内存用的多而是泄漏)
以前用 Access oledb 操作写一些比较复杂 sql 经常出现;
--曲滨*銘龘鶽
10. re: System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
碰到过 当时有一个页面每次在我的机器上打开的时候都报这个错 别的机器没事。很急人 就是不知道为什么 ,后来干脆就不管他了。你写的有点深奥 看不懂。...
--Wuya.net
阅读排行榜
1. ESFramework网络通信框架 -- 序(17496)
2. Java -- 在Eclipse上使用XFire开发WebService(13305)
3. 路径规划(最短路径)算法C#实现(9862)
4. Java -- 在Eclipse上使用Hibernate(7657)
5. AgileIM 源码公开(7563)
6. 我的架构经验小结(三)-- 深入三层架构(6515)
7. DataRabbit 轻量的ORM框架(00) -- 序(6320)
8. 做一个合格的Team Leader -- 基本概念(5811)
9. ESFramework介绍之(6)―― 基于C/S的4层架构概述(5593)
10. 动态调用web服务(5314)
评论排行榜
1. ESFramework网络通信框架 -- 序(76)
2. AgileIM 源码公开(43)
3. DataRabbit 轻量的ORM框架(00) -- 序(38)
4. 写书计划启动!《.NET通信框架的设计、实现与应用》(31)
5. 总裁与专才(30)
6. 函数设计之美--函数需要返回错误码吗(一)?(29)
7. 基于Web的IM实现思考(29)
8. ESFramework V2.0 Beta 发布(25)
9. 路径规划(最短路径)算法C#实现(24)
10. 框架?(24)
60天内阅读排行
1. System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 (1837)
2. 【Emit基础】在IL中进行异常处理(1354)
3. ESFramework3.0 Demo源码(1224)
4. 【Emit基础】调用Tostring()方法的IL表示(1138)
5. 【Emit基础】OpCodes.Ldind_Ref 和 OpCodes.Ldind_I*(529)
6. 【Emit基础】IL定义方法的语法详解(120)
7. 【Emit基础】IL中发布、订阅、触发事件(67)