为什么ref参数不能像out参数一样被忽略?

塞尔曼·杨(Selman Young)

C#7带内联out参数而不带内联参数是否有特定原因ref

以下内容在C#7上有效:

int.TryParse("123", out _);

但这是无效的:

public void Foo(ref int x) { }

Foo(ref _); // error

我看不出为什么不能将相同的逻辑应用于ref参数的原因。

JLRishe

原因很简单:因为不允许将未初始化的变量传递给ref参数。情况一直如此,C#7中的新语法糖并没有改变。

观察:

int i;
MyOutParameterMethod(out i);  // allowed

int j;
MyRefParameterMethod(ref j);  // compile error

C#7中的新功能允许您在使用out参数调用方法的过程中创建变量它不会更改有关未初始化变量的规则。ref参数的目的是允许将已经初始化的值传递给方法,并(可选)允许更改原始变量。方法主体内部的编译器语义将ref参数视为初始化变量,并将out参数视为未初始化变量。在C#7中仍然如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不能像变量一样覆盖管道?

为什么在Rails中将请求参数如1duh像1一样对待?

为什么优先级队列不能像普通队列一样环绕?

为什么TF2的Dataset.map不能像正常的for循环遍历一样?

为什么这种转换不能像C#一样在Powershell中工作?

为什么不能像普通的数据CD一样仅“ dd” CD音频?

为什么我不能像服务一样获得Symfony Finder?

为什么我不能像库类一样快速继承多个类

为什么新功能不能像eval一样起作用?

为什么用逗号分隔的Iterable不能像zip一样工作?

为什么我不能像输入ñ一样输入g̃?

为什么我不能像普通变量一样绑定和重用haskell镜头?

为什么不能像 OCaml 中的常规函数一样传递数据构造函数?

为什么我的按钮标签不能像其他输入标签一样居中?

Java接口像谓词一样但没有参数

获取像普通Windows cmd一样的参数

如果像 [] 一样传递,则访问查询参数值

我可以像参数一样引用子类吗?

像İnVprintf一样使用带有参数的Sprintf

如何使url id参数像路径一样

为什么可以像数组一样索引对象?

为什么这个CTE像柜台一样?

为什么JavaScript(jquery)if语句不能像php if语句一样工作?什么是解决方案?

为什么一个复杂的移位命令不能像某些具有相同逻辑的命令一样工作?

为什么我不能像传递其他变量一样将函数从 Express.js 传递给 EJS?

没有root特权的用户为什么还不能像自己一样仍然使用sudo -u?

为什么Chromium不能像Firefox一样在所有Ubuntu LTS存储库中都是最新的?

C ++ / CX:为什么不返回StringReference的工作就像传递一个参数一样?

如何创建一个像命令行参数一样命名的文件?