gpt4 book ai didi

c# - 为什么不能将属性作为 out 参数传递?

转载 作者:可可西里 更新时间:2023-11-01 08:33:02 25 4
gpt4 key购买 nike

例如:

    int? qID= null;

answer.QuestionID = int.TryParse(lblID.Text, out qID.Value) ? qID : null; //Error: Property or Indexer may not be passed as an out ot ref parameter.

微软文档中说:

“作为 out 参数传递的变量不需要初始化。但是,必须在方法返回之前为 out 参数赋值。”

然后:

“属性不是变量,不能作为输出参数传递。

那么底层 .net 平台设计禁止通过 out 设置对象的属性的原因是什么? out 的值也不必是引用对象——使用值类型是完全合法的。那为什么不呢?

最佳答案

这在 VB 中有效,但在 C# 中无效... VB 有效地为您创建一个临时局部变量,调用传入局部变量作为参数的方法,然后使用局部变量的值设置属性. C# 通常不会为您隐藏此类内容。

该方法本身需要一个变量 作为out 参数。它必须有一个可以写入值的存储位置。不是属性,也不是它需要调用的任何东西:只是一个存储位置。属性不满足该要求。因此编译器在方法中无法做任何事情来允许这样做。

因此,要么编译器必须像 VB 那样用一个临时变量来伪造它,要么像 C# 那样不允许它。就我个人而言,我更喜欢 C# 方法 - 否则它看起来好像每次方法为 out 参数赋值时,都会设置该属性 - 当然不是这种情况。

关于c# - 为什么不能将属性作为 out 参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4819608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com