Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-NullReferenceException试图通过构造函数给出值时_C#_Constructor_Nullreferenceexception_Encapsulation - Fatal编程技术网

C#-NullReferenceException试图通过构造函数给出值时

C#-NullReferenceException试图通过构造函数给出值时,c#,constructor,nullreferenceexception,encapsulation,C#,Constructor,Nullreferenceexception,Encapsulation,当我试图通过构造函数为另一个类DataContext的对象(应该)变量赋值时,它总是空的,我得到一个NullReferenceException。当我试图设置访问器时,一切正常 public class DataRepository { private DataContext data; private AnyFiller currentFiller; public AnyFiller CurrentFiller { get {

当我试图通过构造函数为另一个类DataContext的对象(应该)变量赋值时,它总是空的,我得到一个NullReferenceException。当我试图设置访问器时,一切正常

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;
public DataContext Data { get { return data; } set { data = value; } } 

谁能告诉我我做错了什么吗?

在两个构造函数中,您都在“设置”您的私有字段“数据”。但随后您尝试“获取”您的属性数据,这是通过自动属性快捷方式实现的

您需要更改构造函数以设置属性“Data”而不是私有字段“Data”

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

public DataRepository(DataContext data)
{
    this.Data = data;
}
您可以删除私有字段“data”,因为它与您的属性“data”根本不相关。如果要将属性数据与专用字段“数据”明确关联,则需要执行以下操作:

        DataContext cont = new DataContext();
        DataRepository data = new DataRepository();
        data.Data = cont;
public DataContext Data { get { return data; } set { data = value; } } 

公共DataContext数据{get;set;}未使用您的私有变量数据,因此oen构造函数使用私有“日期”,而另一个使用公共“数据”。可能与so重复,构造函数应该使用访问器而不是变量?而且他们两个都不好现在我明白了,非常感谢:)