如何理解 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,一经查实,立即删除!

相关文章

获得手机的ip

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

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

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

基于文本知识库的强化学习技术——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…

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上,此次压测报告就可以完成了,但收集报告也挺麻烦的,交给谁呢……找了一圈、没找到愿意接手…

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

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

background意识(两)

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

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

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

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

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

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

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

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

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

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

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

一个脚本实现全量增量备份,并推送到远端备份中心服务器

2019独角兽企业重金招聘Python工程师标准>>> 摘要 由于工作需要,刚好需要这样一个功能的脚本,主要解决: 1. 不想在crontab中调度两条备份任务,一个做全量一个做增量 2. 如果每小时做增量,凌晨4点做全量&…

地壳中元素含量排名记忆口诀_Nature:利用熔融包裹体的元素和同位素示踪俯冲带流体来源...

Nature:利用熔融包裹体的元素和同位素示踪俯冲带流体来源在汇聚板块边缘,大洋岩石圈通过俯冲作用携带挥发分(尤其是水)进入地幔。这些俯冲下去的水/流体控制着岩浆产物、地震活动、陆壳形成和资源成矿。但是,识别不同流体的来源(沉积物&#…

Windows 10开发基础——文件、文件夹和库(一)

Windows 10开发基础——文件、文件夹和库(一) 原文:Windows 10开发基础——文件、文件夹和库(一)主要内容: 1.枚举查询文件和文件夹 2.文本文件读写的三种方法——创建写入和读取文件 3.获得文件的属性 枚举查询文件和…

Sigmoid函数与逻辑回归

文章目录(1). Sigmoid函数的由来——伯努利分布的衍生物1.1 为什么会有 sigmoid 函数的出现?1.2 sigmoid 函数推导过程1.3 sigmoid 函数求导(2). 逻辑回归(Logistic Regression)2.1 逻辑回归算法的最终本质——求决策边界2.2 逻辑回归算法中的…

Avalonia跨平台入门第二十二篇之人脸检测

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放、语音播放问题、玩…

pkpm板按弹性计算还是塑性_PKPM中的S\R验算显红原因分析

PKPM软件砼结构施工图中的,梁的配筋面积中,SR验算,经常会有个别构件显红的情况。查了一下PKPM说明书,并没有针对此情况的详细说明。根据本人的实际经验,总结了一下解决此问题的主要方法:一.超筋SR的值显示为…