【问题标题】:C# Create new object with property values in constructor return NullC#在构造函数中创建具有属性值的新对象返回Null
【发布时间】:2017-03-28 07:18:00
【问题描述】:

当类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);
    }
}

在我的主课中:

// Create a new Foo object with following property values
Foo foo = new Foo { Baz = "corge", Bar = "grault" };

【问题讨论】:

标签: c# object constructor properties


【解决方案1】:

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

不,你没有。 (但诚然,如果您不熟悉语法,这可能有点不直观。)

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

public Foo()
{
    //...
}

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

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

public Foo(string baz, string bar)
{
    Baz = baz;
    Bar = bar;
    //...
}

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

new Foo("corge", "grault")

你在这里做什么:

Foo foo = new Foo { Baz = "corge", Bar = "grault" };

相当于这个:

Foo foo = new Foo();
foo.Baz = "corge";
foo.Bar = "grault";

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多