C# 设置什么值 属性 return?

what value C# set property return?

我只是写了"strange"代码,但是构建成功了。 代码:

SqlCommand cmd = null;
SqlParameter p1 = new SqlParameter();
// s="@aa"
var s = (p1.ParameterName = "@aa");

cmd.Parameters.AddWithValue(p1.ParameterName = "@aa",p1.Value = "aaa");

所以我想知道为什么设置 属性 return 值“@aa”?

我不认为这是SQL参数问题,所以我写了其他示例代码:

    TestClass t1 = new TestClass();
    // result="testName"
    var result = (t1.Name = "testName");
    string returnName = t1.TestName(t1.Name = "testName");

我想这就是你觉得奇怪的行:

var s = (p1.ParameterName = "@aa");

来自 C# 规范:

7.17.1 Simple assignment

(...)

The result of a simple assignment expression is the value assigned to the left operand. The result has the same type as the left operand and is always classified as a value.

这意味着赋值运算符 returns 被赋值的值。

属性结合了字段和方法的各个方面。对于对象的用户,属性 似乎是一个字段,访问 属性 需要相同的语法。对于 class 的实现者来说,属性 是一个或两个代码块,代表一个 get 访问器 and/or 一个 set 访问器。读取 属性 时执行 get 访问器的代码块;当 属性 被赋予一个新值时,set 访问器的代码块被执行。没有设置访问器的 属性 被认为是只读的。没有 get 访问器的 属性 被认为是只写的。具有两个访问器的 属性 是可读写的。

您可以从这里找到更多信息:https://msdn.microsoft.com/en-us/library/w86s7x04.aspx

当您分配一个值时,您仍然可以使用分配的值,因此使用您的第二个示例,您做了与此非常相似的事情:

TestClass t1 = new TestClass();
// result="testName"
t1.Name = "testName"
var result = (t1.Name);
t1.Name = "testName"
string returnName = t1.TestName(t1.Name);

在您的第一个示例中,您所做的几乎与此相同:

SqlCommand cmd = null;
SqlParameter p1 = new SqlParameter();
// s="@aa"
p1.ParameterName = "@aa";
var s = (p1.ParameterName);

p1.ParameterName = "@aa";
p1.Value = "aaa";
cmd.Parameters.AddWithValue(p1.ParameterName, p1.Value);