一行中有两个相等(赋值)运算符

时间:2015-05-05 18:42:25

标签: c#

我测试了以下程序:

public class test 
{
    public string phone;    
}

public class verify
{
    private string _phoneNo;
    public string phoneNo 
    {
        get { return _phoneNo; } 
        set { _phoneNo = !String.IsNullOrEmpty(value) ? "*" : ""; } 
    }
}

class Program
{
    static void Main(string[] args)
    {
        verify verify1 = new verify();
        test test1 = new test { phone = verify1.phoneNo = "This is a phone number" };

        Console.WriteLine("test.phone is: " + test1.phone);
        Console.WriteLine("verify1.phoneNo is: " + verify1.phoneNo);
        Console.ReadLine();
    }
}

得到了结果:

test.phone is: This is a phone number
verify1.phoneNo is: *

我对"test.phone"的结果感到困惑。它应该是"*" verify1.phoneNo?

phone = verify1.phoneNo = "This is a phone number"应该等于  phone = (verify1.phoneNo = "This is a phone number");

1 个答案:

答案 0 :(得分:4)

赋值表达式求值为赋给变量的值。这与第二个操作数不同(因为可以在进行赋值之前执行隐式转换,虽然这里没有进行),并且它可能与通过再次评估变量返回的值不同(因为它可能不会完全存储)分配给它的价值)。

在这种情况下代码:

verify1.phoneNo = "This is a phone number" 

解析为"This is a phone number"(即分配给phone的内容),即使"*"最终存储在phoneNo变量的支持字段中。

  

phone = verify1.phoneNo = "This is a phone number"应该等于    phone = (verify1.phoneNo = "This is a phone number");

他们是平等的。括号不会改变评估顺序。