dex*_*ter 11 .net c# 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.
Run Code Online (Sandbox Code Playgroud)
从microsoft文档中可以看出:
"作为out参数传递的变量不需要初始化.但是,必须在方法返回之前为out参数赋值."
然后:
"属性不是变量,不能作为out参数传递.
那么基础.net平台设计中的原因是什么禁止通过out设置对象的属性?out的值也不一定是参考对象 - 使用值类型完全合法.那为什么不呢?
Jon*_*eet 15
这在VB中有效,但在C#中无效... VB有效地为您创建临时局部变量,调用传入局部变量的方法作为参数,然后使用局部变量的值设置属性.C#通常不会为你隐藏那种东西.
该方法本身需要一个变量作为out
参数.它必须有一个存储位置,它只能写入值.不是属性,也不是它需要调用的任何东西:只是一个存储位置.财产不满足该要求.因此,方法中的编译器无法做到这一点.
因此,根据VB,编译器必须使用临时变量伪造它,或者根据C#禁止它.我个人更喜欢C#方法 - 否则看起来好像每次方法为out参数赋值时,属性都会被设置 - 当然不是这种情况.
SLa*_*aks 10
属性只是一对名为get_Something
和的函数set_Something
.
一个out
参数接受一个字段或一个变量的引用; 传递一对函数没有任何意义.
VB.Net可以将属性作为ByRef
参数传递 ; 编译器生成一个临时变量,并在调用该方法后重新为变量赋值.
但是,即使VB.Net无法处理您的情况,因为该Nullable<T>.Value
属性是只读的.