我只是编写“奇怪”代码,但构建成功。 代码:
SqlCommand cmd = null;
SqlParameter p1 = new SqlParameter();
// s="@aa"
var s = (p1.ParameterName = "@aa");
cmd.Parameters.AddWithValue(p1.ParameterName = "@aa",p1.Value = "aaa");
我不认为这是SQL参数问题,所以我写了其他示例代码:
TestClass t1 = new TestClass();
// result="testName"
var result = (t1.Name = "testName");
string returnName = t1.TestName(t1.Name = "testName");
答案 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