为什么不能直接将此值赋给变量?

时间:2015-04-26 13:02:00

标签: c#

下面是一个简单的代码,我声明了一个变量startingMileage,并在方法中为它赋值。

但是我收到以下错误:

  

字段初始值设定项不能引用非静态字段,方法或属性

public partial class Form1 : Form
{
    int startingMileage;
    //I get the error if I directly assign value like this: 
    //int startingMileage = (int)numericUpDown1.Value;

    double reimburseRate = 0.39; //here I can directly assign value to variable

    private void button1_Click(object sender, EventArgs e)
    {          
        startingMileage = (int)numericUpDown1.Value; // assign the value inside method is ok
    }
}

我的问题是:为什么我不能直接将该值分配给它?

1 个答案:

答案 0 :(得分:3)

正如错误消息所示,numericUpDown1.Value是Form类的非静态字段(numericUpDown1)的属性,它在赋值执行时没有值,但0.39是常量,可以分配给它这个领域随时都有。

此外,如果编译器允许您编译该代码,您将获得运行时异常,因为UI控件(例如numbericUpDown1)在Form Constructor(InitializeComponent方法)中实例化,该方法在Form类的字段初始化之后执行。

如果合并设计器代码,它将如下所示:

public partial class Form1 : Form {
    NumbericUpDown numericUpDown1;
    int startingMileage = (int)numericUpDown1.Value;
    double reimburseRate = 0.39;
    ..
    ..