Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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#获取集_C#_.net_List_Nullreferenceexception - Fatal编程技术网

空引用异常C#获取集

空引用异常C#获取集,c#,.net,list,nullreferenceexception,C#,.net,List,Nullreferenceexception,我认为我误解了get的目的;设置在C#中。我有一个我正在尝试填充的double列表,我正在使用下面的代码…这两个都在同一个类中,当我尝试运行它时,我在尝试填充该列表时得到一个Null引用异常。我到底误解了什么 public List<double> NewData { get; set; } public InfoFile(String fileName, String groupName) { this.group = groupName; test = Fil

我认为我误解了get的目的;设置在C#中。我有一个我正在尝试填充的double列表,我正在使用下面的代码…这两个都在同一个类中,当我尝试运行它时,我在尝试填充该列表时得到一个Null引用异常。我到底误解了什么

public List<double> NewData
{ get; set; }

public InfoFile(String fileName, String groupName)
{

    this.group = groupName;
    test = File.ReadAllLines(fileName);
    FileInfo label = new FileInfo(fileName);
    this.name = Path.GetFileName(fileName);
    isDrawn = false;

    for (int t = 2; t < test.Length; t++)
    {
        NewData.Add(double.Parse(test[t].Substring(6, 4)));
    }
}
公共列表新数据
{get;set;}
公共信息文件(字符串文件名、字符串组名)
{
this.group=groupName;
test=File.ReadAllLines(文件名);
FileInfo标签=新的FileInfo(文件名);
this.name=Path.GetFileName(文件名);
isDrawn=假;
for(int t=2;t
您需要初始化/实例化列表

public List<double> NewData
{
    get;
    set;
}

public InfoFile(String fileName, String groupName)
{
    // initialize NewData to a new instance of List<double>
    NewData = new List<double>(); 

    this.group = groupName;
    test = File.ReadAllLines(fileName);
    FileInfo label = new FileInfo(fileName);
    this.name = Path.GetFileName(fileName);
    isDrawn = false;
    for (int t = 2; t < test.Length; t++)
    {
        NewData.Add(double.Parse(test[t].Substring(6, 4)));

    }

}
公共列表新数据
{
得到;
设置
}
公共信息文件(字符串文件名、字符串组名)
{
//将NewData初始化为列表的新实例
NewData=新列表();
this.group=groupName;
test=File.ReadAllLines(文件名);
FileInfo标签=新的FileInfo(文件名);
this.name=Path.GetFileName(文件名);
isDrawn=假;
for(int t=2;t
文档:

在C#3.0及更高版本中,自动实现的属性使 当不需要额外的逻辑时,属性声明更简洁 在属性访问器中。它们还允许客户端代码创建 对象当您声明如下所示的属性时 例如,编译器创建一个私有的匿名支持字段 只能通过属性的get和set访问器进行访问。


根据您的场景,@EricLippert在对OP的评论中指出,在公开列表/集合时很少使用setter。更常见的是“延迟加载”所说的列表/集合:

public List<double> _newData;
public List<double> NewData
{
    get
    {
        if(_newData == null)
            _newData = new List<double>();

        return _newData;
    }
}
public List\u newData;
公共列表新数据
{
得到
{
如果(_newData==null)
_newData=新列表();
返回新数据;
}
}

我相信你只是想做以下几件事

List<double> doubleList = new List<double>();
for (int t = 2; t < test.Length; t++)
{
    doubleList.Add(double.Parse(test[t].Substring(6, 4)));    
}
List doubleList=新列表();
for(int t=2;t

编辑:根据您对输入数据的信心程度,您可能希望查看使用TryParse还是使用Parse方法。

自动属性使用该数据类型的默认值初始化属性,并且所有引用类型的默认值均为null。因此,基本上NewData属性的值为null,除非您为其赋值。对于集合,我宁愿只做一个get访问器,因为在您的情况下,也不需要setter。 所以我的财产看起来像:


私有列表newData=新列表()

公共列表新数据
{
获取{return newDate;}
}

这意味着您应该设置:NewData=newlist();之前添加方法。谢谢!咖啡喝得太少,真是漫长的一天!对于C#的最新版本,您所要做的就是转到公共虚拟列表NewData{get;set;}=newlist()这将设置一个新列表,而不管是否有任何数据可用于填充它,从而允许您避免空引用,以及需要执行
NewData=newlist()