我有一个系统计时器每10秒触发一次事件。因此,我每10秒钟从表格的主线程中调用“Termocoppia”类,将“milliV”的值传递给它,并期望获得变量“tempEx”的值。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Tick += OnTimerTick;
timer.Interval = 10000;
timer.Start();
}
double tempEx;
//here a call the method "Calcola" in the class "Termocoppia"
private void OnTimerTick(object sender, EventArgs e)
{
double milliV = Convert.ToDouble(textBox8.Text); //I have a value of 1.111
Termocoppia thm = new Termocoppia();
thm.Calcola(milliV, tempEx);
textBox7.Text = tempEx.ToString();
}
然后将值milliV转移到“Termocoppia”类中的方法“Calcola”。我用断点调试它,并确认该值是在类中接收的。
“Termocoppia”这个类是这样的:
public class Termocoppia
{
public double Calcola(double milliV, double tempEx)//here the value of milliV is still 1.111
{
tempEx= milliV;//here the value of tempEx is 0???
return tempEx;
}
}
我希望能够收到与收到的收到的完全相同的值,但我一直收到0。 如果我在“tempEx = milliV”行调试变量tempEx,tempEx的值为0,我不明白为什么?我很确定我在这里犯了一个初学者的错误,但是我无法解决这个问题。
答案 0 :(得分:2)
您有两个名为'tempEx'的变量,一个字段和一个参数。您的Calcola
函数会修改tempEx
参数(不是字段)并返回相同的值。但是调用者没有对返回的值做任何事情。我的建议是将两个这个值放入字段tempEx
。
修改你的行:
thm.Calcola(milliV, tempEx);
成:
tempEx = thm.Calcola(milliV, tempEx);
建议:使用编码标准来防止这种错误。对于参数使用camelCasing(so tempEx),对于字段使用下划线(_tempEx)。
答案 1 :(得分:1)
您没有使用Termocoppia.Calcola的返回值。
private void OnTimerTick(object sender, EventArgs e)
{
double milliV = Convert.ToDouble(textBox8.Text); //I have a value of 1.111
Termocoppia thm = new Termocoppia();
// the return value from Cacola has to be assigned to tempEx
tempEx = thm.Calcola(milliV, tempEx);
textBox7.Text = tempEx.ToString();
}
您不应该将tempEx的相同变量名称用作成员变量和方法参数!