C#set属性返回什么值?

时间:2015-02-01 05:58:03

标签: c# properties

我只是编写“奇怪”代码,但构建成功。 代码:

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

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

所以我想知道为什么set属性返回值“@aa”?

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

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

3 个答案:

答案 0 :(得分:1)

我认为你发现奇怪的一行:

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

来自C#规范:

  

7.17.1简单分配

     

(...)

     

简单赋值表达式的结果是赋给左操作数的值。结果与左操作数的类型相同,并且始终归类为值。

这意味着赋值运算符返回已分配的值。

答案 1 :(得分:0)

当您指定一个值时,您仍然可以使用指定的值,因此使用您的第二个示例,您执行了与此类似的操作:

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);

答案 2 :(得分:-1)

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

您可以在此处找到更多信息:https://msdn.microsoft.com/en-us/library/w86s7x04.aspx