我测试了以下程序:
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");
答案 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");
他们是平等的。括号不会改变评估顺序。