如何理解 C# 中的 System.Void 类型?

咨询区

  • ordag

我知道方法声明成 void 表示不返回什么东西,但我发现在 C# 中 void 不仅仅是一个关键词,而且还是一个真实的类型。

voidSystem.Void 的别名,就像 int 的别名是 System.Int32 一样,但为什么不允许直接使用Void类型呢?我觉得在逻辑上这是没有任何问题的。

比如说:

var nothing = new System.Void();

或者

var nothing = new void();

或者

void GiveMeNothing() { }
void GiveMeNothingAgain()
{return GiveMeNothing();
}

都是无法编译的,那请问 System.Void 到底场景在哪里呢?

回答区

  • Cheng Chen

void / System.Voidint / System.Int32 是不同的,它是一种特殊的结构体,仅用于 反射 场景中,比如下面的例子:

class Program
{public static void Main(string[] args){Type voidType = typeof(Program).GetMethod("Main").ReturnType;}
}

在反射操作中,必须要有一种类型可以描述 Main 方法的返回值,这就是 System.Void 的应用场景。

  • Jon

根据 MSDN:https://docs.microsoft.com/en-us/dotnet/api/system.void?view=net-6.0 描述。

Void 结构落于 System.Reflection 命名空间,但在一般的程序开发中很少使用, Void 结构除了从 Object 上继承来的所有类型之外,无任何东西。

所以说,你没有任何理由需要在代码中像下面这样写。

var nothing = new void();
  • llewellyn falco

我们在代码中用 null 来替代 void 类型,代码如下:

public Type GetType(object o)
{var type = o == null ? typeof(void) : o.GetType();
}

这样就轻松实现了 空对象引用模型,也就省去了非常多的 空null 判断,非常方便,接下来就可以这么写:

GetType(o).GetProperties().Select( .....

点评区

我觉得 Cheng Chen 大佬说到点子上了,我们在反射操作中,比如要用 System.Void 来承载那些 void 类型的返回值,学习了。

4f2b061f0c56096e97bce3cde6247550.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArrayList 的实现原理

ArrayList 是List接口的可变数组的实现。实现了所有可选列表的操作,并包括null值在内的所有元素。此类还提供了一些方法来操作内部用来存储列表的数组大小。 ArrayList 的是实现: 对于ArrayList而言,他实现List接口、底层使用数组保存所有元…

获得手机的ip

本文转载至 http://blog.csdn.net/showhilllee/article/details/8746114 iosip手机貌似ASI里获取ip地址的链接不可以了。也曾试过whatismyip,在其网站上的截图获取的ip是正确的,单不知道为什么在我这里却是错误的。所以,在这里分享一下获得手…

Idea maven项目不能新建package和class的解决

如图,新建的maven项目不能新建package 这是因为Java是普通的文件夹,要设置为 现在就可以了

C和指针之数组和函数部分总结

函数和数组2个章节部分学习总结 1、之前对函数参数传递指针没有理解到位,以为像传其它的数据一样,只是数据的一份拷贝,然后不修改原始的数据,函数参数如果是传递的指针,传递给函数是指针的一份拷贝,可以通过指针间接访问数据,从而得到修改原始数据,反正不能把指针变量本…

基于文本知识库的强化学习技术——Learning to Win by Reading Manuals in a Monte-Carlo Framework

论文链接:http://people.csail.mit.edu/branavan/papers/acl2011.pdf 文章目录1. 背景介绍2. 将攻略文本引入值函数 Q(s,a)Q(s, a)Q(s,a) 评价2.1 复杂环境下使用传统 Q(s,a)Q(s, a)Q(s,a) 函数的缺陷2.2 设计 Q(s,a,d)Q(s, a, d)Q(s,a,d) 神经网络2.3 模型训练流程…

这是Blazor上传文件的最佳方式吗?

Blazor不得不说真是好东西,极大的提升了开发效率,很多的页面交互功能基本上只需要写很少的代码就能实现了,而且还是无js实现,你也绝对没有想到过,Blazor实现文件上传是有多么简单!先说结论:Blaz…

iOS SQLite函数总结

1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 **ppDb // 数据库实例 ); 2.执行任何SQL语句 int sqlite3_exec( sqlite3*, // 一个打开的数据库实例 const char *sql, …

ubuntu 下安装五笔输入法

2019独角兽企业重金招聘Python工程师标准>>> 从两年开始用五笔的吧,自从我学会用五笔之后,基本上就没有用过拼音了,我记忆中使用拼音也就那么几次,好像都是在远程协助别人的时候,用他们电脑上的拼音。然后我…

openstack horizon国际化分析

2019独角兽企业重金招聘Python工程师标准>>> 参考 官网国际化介绍:https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#module-django.conf.urls.i18n Django模板(网页多语种支持/国际化): http://blog.…

6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈

1. 前言上面我们已经做到了接口以及场景压测,通过控制台输出结果,我们只需要将结果收集整理下来,最后汇总到excel上,此次压测报告就可以完成了,但收集报告也挺麻烦的,交给谁呢……找了一圈、没找到愿意接手…

C和指针之字符串之strlen、strcpy、 strcat、strcmp使用总结

1、常见字符串相关操作 我们知道有strlen、 strcpy、strcat、strcmp、这样一一系列函数 2、实现Demo #include <stdio.h> #include <string.h>//求字符串长度并且打印 void get_len(char *p) {int len = strlen(p);printf("%s len is %d\n", p, len); …

被AI人机疯狂单杀?王者荣耀AI“绝悟”亲测体验

文章目录&#xff08;一&#xff09; 如何评测“绝悟”的智能程度&#xff1f;&#xff08;二&#xff09;“绝悟”个体操作能力分析2.1 草丛埋伏2.2 越塔强杀2.3 技能避伤2.4 技能combo&#xff08;三&#xff09;“绝悟”团队意识能力分析3.1 团队支援3.2 团队控龙3.3 反野意…

background意识(两)

今天看到了有关学习的价值的文章background于background-position该博客&#xff0c;现在与大家分享&#xff1a;语法&#xff1a; background-position : length || length background-position : position || position 取值&#xff1a; length&#xff1a;百分数 |由浮点数字…

js 月份加6个月_美国切削工具6月份订单较上月增加10.1

根据美国切削工具协会(USCTI)和AMT美国制造技术协会的数据&#xff0c;2020年6月&#xff0c;美国切削工具的总消费额为1.506亿美元。根据参与切削工具市场报告合作的公司报告&#xff0c;这一总额比5月份的1.368亿美元增长了10.1%&#xff0c;与2019年6月报告的1.997亿美元相比…

Yet another nio framework for java

项目名称&#xff1a;Yanf4j(Yet another nio framework for java)项目地址&#xff1a;http://code.google.com/p/yanf4j/,当前版本0.30-beta1协议&#xff1a;Apache License, Version 2.0 简单描述&#xff1a;有这么多nio框架了&#xff0c;为什么要another&#xff1f;重复…

selenium 使用js执行脚本儿链接整理

2019独角兽企业重金招聘Python工程师标准>>> 使用Webdriver执行js小结&#xff1a;http://lijingshou.iteye.com/blog/2018929 SeleniumWebdriver学习(三)执行JS脚本&#xff1a;http://www.tuicool.com/articles/buIbeiN selenium webdriver 执行javascript代码&am…

C和指针之字符串之strncpy、strncat、strncmp

1、strncpy、strncat、strncmp 1)、函数原型char *strncpy(char *dest,char *src,size_t n); 复制字符串src中的内容(字符,数字、汉字....)到字符串dest中,复制多少由size_t n的值决定。如果src的前n个字符不含NULL字符,则结果不会以NULL字符结束。如果n<src的长度,只…

接口返回json对象出现套娃递归问题 | System.Text.Json 版本

前言看到一篇文章《Asp-Net-Core开发笔记&#xff1a;接口返回json对象出现套娃递归问题》原文是使用 NewtonsoftJson 解决的返回json对象出现套娃递归问题&#xff1a;services.AddControllersWithViews().AddNewtonsoftJson(options > {options.SerializerSettings.Refere…

高效性跨平台分布式软件开发技术——gRPC

文章目录1. gRPC&#xff08;google Remote Procedure Call&#xff09; 技术 —— 高效性地跨平台、跨语言开发2. 基于 python 实现 gRPC 框架2.1 一个 gPRC 项目必须包含的几大部分2.2 helloworld.proto 文件——定义全局可调用函数及其参数数据结构2.3 server.py 文件——实…

在VS中设置比较和谐的字体和颜色的方法

作者&#xff1a;朱金灿来源&#xff1a;http://blog.csdn.net/clever101先在studiostyl.es网站选择你喜欢的字体方案&#xff0c;我个人比较喜欢这款&#xff1a;Humane Studio&#xff0c;注意在网页上选择你使用VS版本&#xff0c;然后单击Downlaod this scheme就可以了&…