1

或者如果 if 语句不返回 null - 为什么不能分配这个特定的属性。

例子:

String stringParam = "some string";

MyClass myclass = new MyClass();

myclass.MyProperty = MyMethod(out stringParam ) ? stringParam : String.Empty;

在上述行之后直接命中断点 - 我评估 MyProperty - 它为空!?

我已经三次检查了 MyMethod 的返回,它是真的(返回类型是布尔值)。并且 stringParam 正在 MyMethod 中更新。

假设我刚才所说的在某种程度上是不准确或错误的 - MyProperty 至少应该等于 String.Empty。如果 MyMethod 为真,但我的字符串正在更新 - MyProperty 应该等于“某个字符串”。

为什么它是空的?

在 MyClass 声明中,没有关于访问修饰符的复杂性。这很简单:

public class MyClass()
{
public String MyProperty;
}

注意:虽然我在命名等方面对代码进行了一些简化和修改——这段代码在语法上与我的代码相同。

我试过的

我为此改变了语法,令人惊讶的是(对我来说)它起作用了!?

if(MyMethod(out stringParam)) { myclass.MyProperty = stringParam; }

在评估时,myclass.MyProperty 现在等于预期的更新的 stringParam。

我很想解释为什么。内联 if 语句在输出参数方面的行为是否不同?

4

1 回答 1

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;
于 2012-09-28T17:14:41.573 回答