添加到集合时如何处理空值。(Mvc,C#)

时间:2013-07-02 18:04:14

标签: c# asp.net-mvc

我正在读取一个excel文件,并逐列将数据添加到集合中。 一旦遇到空值,它就会在下面的一行中爆炸:

exampleDataList.Add(new PersonalData {firstname = col1Value.ToString(),lastname = col2Value.ToString(), address=col3Value.ToString(), salary=col4Value.ToString() });

[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
    const int startRow = 1;

    if (file != null && Path.GetExtension(file.FileName) == ".xlsx")
    {
        IList<PersonalData> exampleDataList = new List<PersonalData>();
        using(var excel = new ExcelPackage(file.InputStream))
        {
            //open and read the xlsx file.                   
                //Get the work book in the file
            ExcelWorkbook workBook = excel.Workbook;
                if (workBook != null)
                {
                    if (workBook.Worksheets.Count > 0)
                    {
                        //Get the first worksheet
                        ExcelWorksheet currentWorkSheet = workBook.Worksheets.First();


                        for (int rowNumber = startRow + 1; rowNumber <= currentWorkSheet.Dimension.End.Row; rowNumber++)
                        // read each row from the start of the data (start row + 1 header row) to the end of the spreadsheet.
                        {
                            object col1Value = currentWorkSheet.Cells[rowNumber, 1].Value;
                            object col2Value = currentWorkSheet.Cells[rowNumber, 2].Value;
                            object col3Value = currentWorkSheet.Cells[rowNumber, 3].Value;
                            object col4Value = currentWorkSheet.Cells[rowNumber, 4].Value;                             

                            if ((col1Value != null && col2Value != null))
                            {
                                exampleDataList.Add(new PersonalData {firstname = col1Value.ToString(),lastname = col2Value.ToString(), address=col3Value.ToString(), salary=col4Value.ToString() });
                            }                                  

                        }

                        int myresultcount = WriteToDb(exampleDataList);
                    }

                }                  

        }
    }

    return RedirectToAction("Index");        
}

这是我的班级

public class PersonalData
{
    public int Id { get; set; }
    public string  firstname { get; set; }
    public string lastname { get; set; }
    public string address { get; set; }
    public string salary { get; set; }
}

获取错误消息:对象引用未设置为对象的实例

我该如何纠正?我究竟做错了什么。我的目标是将其写入数据库 在一天结束时。

3 个答案:

答案 0 :(得分:1)

我相信你忘了检查value3和value4是否为null,或者如果允许这些值为null,则在执行ToString()

之前检查它们是否为null
if (col1Value != null && col2Value != null && 
    col3Value != null && col4Value != null)
{
    exampleDataList.Add(new PersonalData 
     {
          firstname = col1Value.ToString(),
          lastname = col2Value.ToString(), 
          address = col3Value.ToString(), 
          salary = col4Value.ToString() 
     });
}  

OR

if (col1Value != null && col2Value)
{
    exampleDataList.Add(new PersonalData 
    {
       firstname = col1Value.ToString(),
       lastname = col2Value.ToString(), 
       address = col3Value != null ? col3Value.ToString() : String.Empty, 
       salary = col4Value.ToString() != null ? col4Value.ToString() : String.Empty
    });
}  

答案 1 :(得分:1)

检查第3列和第4列中的空值:

if ((col1Value != null && col2Value != null && col3Value != null && col4Value != null))
{
    exampleDataList.Add(new PersonalData {firstname = col1Value.ToString(),lastname = col2Value.ToString(), address=col3Value.ToString(), salary=col4Value.ToString() });
} 

或者,如果您想要第3列和第4列的空字符串而不是NULL:

if ((col1Value != null && col2Value != null))
{
    exampleDataList.Add(new PersonalData {
            firstname = col1Value.ToString(),
            lastname  = col2Value.ToString(), 
            address   = col3Value == null ? "" : col3Value.ToString(), 
            salary    = col4Value == null ? "" : col4Value.ToString() });
}

为了简化NULL检查,您可以利用+使用空字符串表示空值的行为,并自动调用.ToString()对象:

if ((col1Value != null && col2Value != null))
{
    exampleDataList.Add(new PersonalData
        {
            firstname = col1Value.ToString(),
            lastname  = col2Value.ToString(), 
            address   = "" + col3Value, 
            salary    = "" + col4Value
        });
}

答案 2 :(得分:0)

您缺少对colXValue对象的一些验证,在尝试对它们调用ToString()方法之前应该这样做。

这取决于你想如何处理空值。

如果你想忽略任何列上任何空值的记录,那么只需扩展你的:

 if ((col1Value != null && col2Value != null))

看起来像:

 if (    col1Value != null 
      && col2Value != null
      && col3Value != null
      && col4Value != null)

您可能还想将空值转换为空字符串,在这种情况下,您可以执行以下操作:

 object col1Value = currentWorkSheet.Cells[rowNumber, 1].Value;
 object col2Value = currentWorkSheet.Cells[rowNumber, 2].Value;
 object col3Value = currentWorkSheet.Cells[rowNumber, 3].Value;
 object col4Value = currentWorkSheet.Cells[rowNumber, 4].Value;
 if (col1Value == null) col1Value = string.Emtpy;
 if (col2Value == null) col2Value = string.Emtpy;
 if (col3Value == null) col3Value = string.Emtpy;
 if (col4Value == null) col4Value = string.Emtpy;
 exampleDataList.Add(new PersonalData {firstname = col1Value.ToString(),lastname = col2Value.ToString(), address=col3Value.ToString(), salary=col4Value.ToString() });