考虑以下示例。
private void ComboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
double selected = Convert.ToDouble(ComboBox1.SelectedItem);
dataAdapter = new SqlDataAdapter(selectCommand, connectionString);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
DataTable table = new DataTable();
dataAdapter.Fill(table);
foreach(DataRow row in table.Rows)
{
var price = Convert.ToDouble(row["price"]);
var calculation = //do your calculation here with **price** and **selected** value above from combo box
row["price"] = calculation.ToString();
}
datagridview.Source = table;
}
如果我试图改变类struct AStruct{
var i = 0
}
class AClass{
var i = 0
var a: A = A(i: 8)
func aStruct() -> AStruct{
return a
}
}
实例的变量,它会成功编译。
AClass
但是如果我试图改变var ca = AClass()
ca.a.i = 7
方法的返回值,编译尖叫
aStruct
有人可以解释一下。
答案 0 :(得分:11)
这是编译器告诉你修改struct
没用的方法。
以下是发生的情况:当您致电aStruct()
时,A
的副本会传回给您。此副本是临时。您可以检查其字段,或将其分配给变量(在这种情况下,您可以访问您的修改)。如果编译器允许您对此临时结构进行修改,则无法访问它们。这就是编译器确定这是编程错误的原因。
答案 1 :(得分:4)
试试这个。
var aValue = ca.aStruct()
aValue.i = 9
解释
aStruct()
实际上会返回原始结构a
的副本。除非您为其分配var
。
答案 2 :(得分:3)
尝试使用struct
代替struct
,因为它通过引用传递并保留在对象上,而{{1}}按值传递(创建副本)。< / p>