【发布时间】:2011-01-27 17:18:50
【问题描述】:
例如:
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参数赋值。”
然后:
"属性不是变量,不能作为out参数传递。
那么,在底层 .net 平台设计中禁止通过 out 设置对象属性的原因是什么? out 的值也不必是引用对象——完全合法地使用值类型。那为什么不呢?
【问题讨论】:
-
Max,有 any 保证该属性不只实现 getter 吗?例如,公共字符串 MyName {get;private set;}。你不能,因此框架设计非常有意义。
-
@code4life:你的说法没有意义,编译器可以在编译时检查属性是否已经有一个setter。
-
我问你的问题是,为什么你使用
Nullable<int>作为qID 而int就可以了? -
@Lazarus 这只是为了展示问题,代码与现实世界无关。但你是对的,这是有道理的。
-
如果您考虑抛出异常的属性,则会出现另一个有趣的问题。然后一个 TryParse 可能会成功,但 Property 可能会阻塞,它会为一些令人困惑的错误让路。或者,如果调用的方法设置属性两次(首先将其设置为默认值,并且可选地设置其他值),例如 TrySomething 愉快地假设其 out 参数可以设置为 null,它可以设置但属性不允许它。
标签: c# .net parameters