看不出为什么这个简单的if语句返回null?

时间:2012-09-28 15:26:00

标签: c# string if-statement shorthand-if

或者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参数方面表现不同?

1 个答案:

答案 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;