C# - 尝试通过构造函数提供值时出现NullReferenceException

时间:2017-04-03 13:08:41

标签: c# constructor nullreferenceexception encapsulation

当我试图通过构造函数给一个变量赋值给另一个类DataContext的对象时,它始终为null,我得到一个NullReferenceException。当我通过set accessor尝试这一切时,一切正常。

public class DataRepository
{
    private DataContext data;
    private AnyFiller currentFiller;

    public AnyFiller CurrentFiller
    {
        get
        {
            return currentFiller;
        }
        set
        {
            this.currentFiller = value;
        }
    }

    public DataContext Data { get; set; }

    public DataRepository()
    {
        this.data = new DataContext();
    }

    public DataRepository(DataContext data)
    {
        this.data = data;
    }

任何一个构造函数都不能正常工作,但正如我之前所说,当我做这样的事情时,它正在工作:

        DataContext cont = new DataContext();
        DataRepository data = new DataRepository();
        data.Data = cont;

有人能告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:2)

在你的两个构造函数中,你都在设置'您的私人字段'数据'。但是那时你会试着去找'您的属性'数据',它是使用自动属性快捷方式实现的。

您需要更改构造函数以设置属性'数据'而不是私人领域'数据'。

public DataRepository()
{
    this.Data = new DataContext();
}

public DataRepository(DataContext data)
{
    this.Data = data;
}

你可以摆脱私人领域的数据'因为它与您的财产无关'数据'一点都不如果您希望将您的媒体资源明确地与您的私人字段“数据”相关联,你需要这样做:

public DataContext Data { get { return data; } set { data = value; } }