为什么我的数组显示为从未分配给?

时间:2016-03-10 17:23:14

标签: c# arrays

我目前正在开展一个项目,该项目涉及获取包含信息的文本文件,并将值存储到数组中,以用于确定某本书是否应根据其ID进行“拆分”。

我在正在执行此任务的方法的类中声明了一个string数组,并使用StreamReader.

从文本文件中分配值

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Odbc;
using System.Data.OleDb;
using System.IO;

namespace ElectionsPollBooks
{    
    class dbElections
    {     
        //arrays, ints, for pollbook splits
        string[] as_splitNumbers;
        int i_splitCount;

        public void Process()
        {
            //opens conenction
            OpenConn();
            //Gets the precinct info for later parsing
            GetDistrictInfo();
            //populate splits array
            PopulateSplits();
            //the hard work
            SeperateDataSet();
            CloseConn();
        } 

        //...other methods in here, not related
        private void PopulateSplits()
        {
            //sets the count
            i_splitCount = 0;

            //reads the split file
            StreamReader sr_splits = new StreamReader(@"a\file\path\here\.txt");
            //begin populating the array
            while (sr_splits.ReadLine() != null)
            {
                //split ID
                as_splitNumbers[i_splitCount] = sr_splits.ReadLine();
                i_splitCount = i_splitCount + 1;
            }
            sr_splits.Close();
            sr_splits.Dispose();
        }
    }
}

Visual Studio在这一行告诉我:

  string[] as_splitNumbers;

那:

"as_splitNumbers is never assigned to and will always return a null value."

当我也运行该程序时,它会在NullReferenceException循环期间抛出while

我的问题是,在将StreamReader数组分配给as_splitNumbers数组时,我做错了什么?我的逻辑中缺少什么?

谢谢。

3 个答案:

答案 0 :(得分:2)

尝试使用List(System.Enumerable)。

因为在阅读之前你不知道数组的大小。

在变量的声明中,它将意味着:

List<string> as_splitNumbers = new List<string>();

在循环中你可以简单地写

as_splitNumbers.Add(sr_splits.ReadLine())

它会起作用!

答案 1 :(得分:2)

您没有使用大小初始化数组。

如果您不知道尺寸,可以使用List<int>.

更改

string[] as_splitNumbers

List<string> as_SplitNumbers = new List<string>();

和您的方法:

   private void PopulateSplits()
    {
        //sets the count
        i_splitCount = 0;

        //reads the split file
        using(StreamReader sr_splits = new StreamReader(@"a\file\path\here\.txt"))
        {
          //begin populating the array
          while (sr_splits.ReadLine() != null)
          {
              //split ID
              string split = sr_splits.ReadLine();
              as_splitNumbers.Add(split);
              i_splitCount = i_splitCount + 1;
          }
        }
    }

如果您要将其发送到(SeperateDataSet();?)需要一个数组,您可以稍后使用_asSplitNumbers.ToArray()进行投射。 List<T>只允许您在不知道大小的情况下添加。

答案 2 :(得分:1)

永远不会分配您的as_splitNumbers数组。您需要首先使用大小初始化数组。

string[] as_splitNumbers = new string[SIZE];

但是,似乎你应该在你的情况下使用List。

List<string> as_splitNumbers = new List<string>();

然后

//split ID
as_splitNumbers.Add(sr_splits.ReadLine());