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

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

问题描述:

创建类Foo的新对象时,构造函数应根据对象属性创建新文件夹和新文件。但我得到NullException (param: path2)C#在构造函数中使用属性值创建新对象return Null

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

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

可能重复[什么是NullReferenceException,以及如何解决它?](http://*.com/questions/4660142/what-is-a-nullreferenceexception-and-how-doi-i-fix -it) – Dmitry

+4

使用该语法,构造函数在属性分配给之前运行*。既然你在构造函数的正文中使用了它们,那么你倒霉了。也许让他们构造函数参数呢? –

+2

可能的重复http://*.com/questions/17327266/constructor-vs-object-initializer-precedence-in-c-sharp - 构造函数与对象初始值设定项在C#中的优先顺序 – KMoussa

但我给的属性值,当我创建的对象:

我的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); 
    } 
} 

在我的主类?

不,你没有。 (虽然可以肯定的是,如果你不熟悉语法,它可能有点不直观。)

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

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"; 

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