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

标签 c# .net parameters

例如:

    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/

相关文章:

MySQL ALTER TABLE 在存储过程中带有参数

C++ 将一个参数默认为另一个参数

c# - 不符合键值编码(Monotouch 和 iOS 6)

c# - 如何使用 C++ Logic 在 C# 或 VB 中创建接口(interface)

c# - Active Directory 中的搜索过滤器无效

c# - 检查现有项目不起作用

c# - 如何将字符串转换为UTF8?

c# - 什么时候调用 IEnumerable.GetEnumerator 而不是 IEnumerable<T>.GetEnumerator?

C++:参数与参数之间的区别?

c# - C#中具有多个网络的UDP组播