我无法在新对象上初始化成员变量

Hi1*_*ico 0 c#

我对 C# 还很陌生,希望在这里得到一些帮助。mypath在本例中,该变量是一个占位符。该类包含在using Programm.src;

这是我的代码,我想input_excel_pathmainWindow1对象中初始化变量。

编译器中的结果

错误 CS0747:无效的初始化程序成员声明符和编译器错误 CS0165:使用未分配的局部变量“名称”。

        MainWindow mainWindow1 = new MainWindow()
        {
            mainWindow1.m_input_excel_path = mypath;
        };
Run Code Online (Sandbox Code Playgroud)

这是我的课:

   class MainWindow
   {
    
    public string m_input_excel_path = String.Empty;
    
    public MainWindow(string input_excel_path )
    {
        m_input_excel_path  = input_excel_path;       
    }
}
Run Code Online (Sandbox Code Playgroud)

kni*_*ttl 5

对象初始值设定项语法直接指定属性,无需变量名称。您已经有了一个参数化构造函数,那么为什么不直接调用构造函数呢?

MainWindow mainWindow1 = new MainWindow(mypath);
Run Code Online (Sandbox Code Playgroud)

如果您想按照预期的方式使用初始化语法,则必须在类中实现无参数构造函数,然后在初始化时使用正确的语法:

class MainWindow
{
    
    public string m_input_excel_path = String.Empty;
    
    public MainWindow(string input_excel_path)
    {
        m_input_excel_path = input_excel_path;       
    }

    public MainWindow() {
        // empty ctor required for your initializer to work
    }
}

// somewhere else:
MainWindow mainWindow1 = new MainWindow
{
    m_input_excel_path = mypath
};
Run Code Online (Sandbox Code Playgroud)

初始化语法只是以下代码的语法糖:

MainWindow mainWindow1 = new MainWindow();
mainWindow1.m_input_excel_path = mypath;
Run Code Online (Sandbox Code Playgroud)

请参阅对象初始值设定项和构造函数之间有什么区别?更多细节。

并且没有什么可以阻止您混合构造函数调用和初始化语法。例如,如果您的班级中有另一个字段/属性:

class MainWindow
{
    
    public string m_input_excel_path = String.Empty;
    public int age;
    
    public MainWindow(string input_excel_path)
    {
        m_input_excel_path = input_excel_path;       
    }
}

// somewhere else:
MainWindow mainWindow1 = new MainWindow(mypath)
{
    age = 42
};
Run Code Online (Sandbox Code Playgroud)