例如:
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/