【问题标题】:Return Boolean from a method从方法返回布尔值
【发布时间】:2011-10-14 21:37:50
【问题描述】:

我正在我的程序中创建一个保存选项,用于将更改保存到文件中。我正在使用此代码保存并获取MessageBox 以显示该过程的结果我在“对象引用未设置为对象的实例”这一行上收到错误。

     SaveFileCheck = StockHandler.SaveChangesToFile();

这是我的代码

    private void Save_Click(object sender, EventArgs e)
    {

        bool SaveFileCheck = false;
        var result = MessageBox.Show("Are you sure you want to Save the changes ?", "My   Application",
      MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
        if (result == DialogResult.Yes)
        {           

                 SaveFileCheck = StockHandler.SaveChangesToFile();
                 if (SaveFileCheck)
                 {
                     MessageBox.Show("The process was a success");
                 }
                 else
                 {
                     MessageBox.Show("The process failed please make sure that the file is not been       used and try again");
                 } 

            //Save the file back


        }
    }
}
}

    public bool SaveChangesToFile() 
    {
        try
        {
            if (FileName != null)
            {
                using (StreamWriter Write = new StreamWriter(FileName, false))
                {
                    foreach (Stock s in FileStockList)
                    {
                        Write.Write(s.ToString() + "\r\n");

                    }

                }
            }
            else {
                return false;
            }

        }
        catch(IOException ex) 
        {
            return false;
            throw new ArgumentException("something went wrong an error" + ex + "is been cought");

        }
        return true;


    }

【问题讨论】:

  • StockHandler 必须是null;你确定你要实例化它吗? (如StockHandler = new StockHandler()
  • StockHandlernull,在调用方法之前为其分配一个类实例
  • SaveChangesToFile 中的哪一行引发了异常?是foreach (Stock s in FileStockList)吗?如果是这样,那么 FileStockList 仍然是 null - 你忘了创建它。
  • 什么是 FileStockList,它在哪里初始化?
  • 向我们展示StockHandler的前几行代码。

标签: c# object boolean


【解决方案1】:

StockHandler 为空。

如果StockHandler 不是static 类,则需要先创建它的实例,然后才能对其调用方法:

var handler = new StockHandler();
SaveFileCheck = handler.SaveChangesToFile();

或者,如果StockHandler 是成员变量:

StockHandler = new // something

【讨论】:

  • 我编辑了 stockhandler 是 stockhelper 实例的代码, savechangestofile 方法是他们的
【解决方案2】:

您还没有显示StockHandler 是什么,或者您从哪里获得它 - 但它看起来是空的。您需要将其作为对有效对象的引用。仅从您提供的代码中我们就无法说更多了。

请注意,这与返回 bool 的方法无关

【讨论】:

    【解决方案3】:

    可能是StockHandler 为空,或者SaveChangesToFile 方法中的某些内容为空或无效。

    编辑

    看这里:

    private StockHelper StockHandler;
    StockHandler.SaveChangesToFile(); // = bang :(
    

    你需要初始化StockHelper实例:

    private StockHelper StockHandler = new StockHelper();
    StockHandler.SaveChangesToFile(); // = okay :)
    

    我假设这段代码无法编译,这可能意味着StockHandler 为空。否则,错误很可能指向SaveChangesToFile 方法。

    其次,要么需要在SaveChangesToFile()方法中吞下异常(不建议),要么需要去掉return语句并抛出异常。如果您决定抛出异常,它绝对不应该是ArgumentException,因为它与提供给方法的参数(或缺少参数)无关。

    【讨论】:

      【解决方案4】:

      什么是 stockhandler——你的 SaveChangesToFile 方法是一个实例方法——所以你是否将变量“StockHandler”实例化为包含方法 SaveChangesToFile() 的任何类的实例;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-03
        • 2015-09-10
        • 2012-11-04
        • 2015-06-18
        • 1970-01-01
        • 2015-12-27
        • 2016-01-14
        相关资源
        最近更新 更多