我目前正在开展一个项目,该项目涉及获取包含信息的文本文件,并将值存储到数组中,以用于确定某本书是否应根据其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
数组时,我做错了什么?我的逻辑中缺少什么?
谢谢。
答案 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());