Helle家伙,
我正在尝试创建自定义的Excel输出。但我的事情是它没有给我输出。一旦代码到达if (fline.Designator == null)
,它就会显示错误。
请查看我的问题并给我一个解决方案。
代码: -
private void button1_Click(object sender, EventArgs e)
{
string[] strLines = System.IO.File.ReadAllLines(textBox1.Text);
string line = string.Empty;
string CarouselName = enter.Text;
int iCarousel = 0;
char seperator = '\t';
SortedDictionary<string, ExcelData> lstExcel = new SortedDictionary<string, ExcelData>();
ExcelData fline = null;
for (int i = 0; i < strLines.Length; i++)
{
line = RemoveWhiteSpace(strLines[i]).Trim();
if (line.Length == 0)
continue;
string[] cells = line.Replace("\"", "").Split(seperator);
if (i > 0)
{
if (!lstExcel.ContainsKey(cells[1].Replace(" ", "_")))
{
fline = new ExcelData();
lstExcel.Add(cells[1].Replace(" ", "_"), fline);
fline.Footprint = cells[2].Replace(" ", "_");
fline.Comment = cells[1].Replace(" ", "_");
iCarousel++;
if (iCarousel > 45)
iCarousel = 1;
fline.Location = CarouselName;
}
else
{
fline = lstExcel[cells[1].Replace(" ", "_")];
}
fline.SrNo++;
fline.Total++;
}
if (fline.Designator == null)// here its showing the error..
// i don't know why its the code is incorrect. please help me out!!
fline.Designator = new List<string>();
fline.Designator.Add(cells[0].Replace(" ", "_"));
}
ExportInExcel(lstExcel, @"C:\Users\Stacy\Desktop\myExcel.xls");
System.Windows.Forms.Application.Exit();
}
答案 0 :(得分:1)
查看for
循环,fline
永远不会被初始化。
最初,有一行:
ExcelData fline = null;
在for
循环期间,从int i=0
开始,您有if (i > 0)
在该条件下将值分配给fline
。但是,对于i=0
的情况,永远不会为fline
分配值。
因此,当您在fline.Designator == null
循环中检查i=0
时是否for
时,它会抛出异常。例外情况是告诉您fline
尚未分配ExcelData
的实例。换句话说,fline
本身为null:它没有任何属性值。
我不确定完全您的if (i > 0)
条件正在检查什么,但您的解决方案最终要么:
if (i > 0)
更改为if (i >= 0)
,从而在您的常规条件下处理i=0
案例,或者...... fline
案例的某个时刻实例化i=0
。最初声明变量时可以执行此操作:ExcelData fline = new ExcelData();
而不是ExcelData fline = null;
(在循环之前)。答案 1 :(得分:1)
我的猜测是你的错误是一个空引用异常。
在您的方法中,您使用fline
初始化null
:
ExcelData fline = null;
然后输入for
循环,开始从0(int i = 0
)开始迭代。
您还有一个条件:if (i > 0)
,其中您使用fline
类的实例初始化ExcelData
变量:
fline = new ExcelData();
但请注意,这仅适用于大于0的i
。
那么当i
为0
时会发生什么 - 并且在循环的第一次迭代中就是这种情况。
首次迭代时i
为0
。因此,您跳过fline
语句中的if
初始化,然后直接继续
if (fline.Designator == null)
在这里,您尝试访问fline
,但它从未被初始化。所以你得到空引用异常。