或者if语句不返回null - 为什么不能将此特定属性分配给。
示例:
String stringParam = "some string";
MyClass myclass = new MyClass();
myclass.MyProperty = MyMethod(out stringParam ) ? stringParam : String.Empty;
在上面一行之后直接点击断点 - 我评估MyProperty - 它是空的!?
我已经检查了MyMethod的返回值并且它是真的(返回类型是布尔值)。并且在MyMethod中正在更新stringParam。
假设我刚才所说的不准确或错误 - MyProperty至少应该等于String.Empty。如果MyMethod为true但我的字符串正在更新 - MyProperty应该等于“some string”。
为什么它为空?
在MyClass声明中,没有关于访问修饰符的复杂性。这很简单:
public class MyClass()
{
public String MyProperty;
}
注意:虽然我在命名等方面略微简化和修改了代码 - 这段代码在语法上与我的代码相同。
我尝试过什么
我为此改变了语法,令人惊讶的是(对我来说)它有用了吗??
if(MyMethod(out stringParam)) { myclass.MyProperty = stringParam; }
在评估时,myclass.MyProperty现在等于预期的更新的stringParam。
我喜欢解释原因。是否内联if语句在out参数方面表现不同?
答案 0 :(得分:1)
如果您可以更改MyMethod
,请尝试以下操作:
public bool MyMethod(ref string parameter)
{
// Do something with parameter here...
return true;
}
然后致电
var stringParam = "some string";
var myClass = new MyClass();
myClass.MyProperty = MyMethod(ref stringParam) ? stringParam : string.Empty;