C#在构造函数中使用属性值创建新对象返回Null

use*_*579 0 c# constructor properties object

Foo创建一个新的类对象时,构造函数应该根据对象属性创建一个新文件夹和一个新文件.但我明白了NullException (param: path2)吗?

我发现在调用构造函数时,对象属性具有Null值.但是我在创建对象时给出了属性值?我错过了什么?

我的Foo课程:

public class Foo
{
    public string Bar { get; set; }
    public string Baz { get; set; }
    public string Source { get { return Path.Combine(Qux, Baz, Bar); } }
    private string Qux { get { return Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); } }

    public Foo()
    {
        // Use property values to find or create Directory and File
        if (!Directory.Exists(Path.Combine(Qux, Baz))) Directory.CreateDirectory(Path.Combine(Qux, Baz));
        if (!File.Exists(Source)) File.Create(Source);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的主课:

// Create a new Foo object with following property values
Foo foo = new Foo { Baz = "corge", Bar = "grault" };
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 8

但是我在创建对象时给出了属性值?

不,你没有.(尽管如果你对语法不熟悉,它可能会有点不直观.)

代码期望在构造函数中提供这些代码.但是你有一个无参数的构造函数:

public Foo()
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

因此,当该构造函数执行时,这些属性尚未设置并具有其默认值.

将参数添加到构造函数本身:

public Foo(string baz, string bar)
{
    Baz = baz;
    Bar = bar;
    //...
}
Run Code Online (Sandbox Code Playgroud)

然后将它们提供给构造函数:

new Foo("corge", "grault")
Run Code Online (Sandbox Code Playgroud)

你在这做什么:

Foo foo = new Foo { Baz = "corge", Bar = "grault" };
Run Code Online (Sandbox Code Playgroud)

相当于:

Foo foo = new Foo();
foo.Baz = "corge";
foo.Bar = "grault";
Run Code Online (Sandbox Code Playgroud)

在设置参数之前,首先调用构造函数.