//缓存类,保存IO流中读到的用户信息
    
    class Temp
    {
       public  ArrayList arraylist = new ArrayList();
       public  ArrayList UserArrayList = new ArrayList();
        public void Write_Temp()
        {
            DB db = new DB();
            UserArrayList =db.Read();  
        }          public bool userSel()        //判断是否存在了数据
        {
            if (UserArrayList.Count == 0)    //为什么我执行到这步的时候就会出现  为将对象实例化的错误呢??                return false;
            else
                return true;
        }我该怎么解决??

解决方案 »

  1.   

    [color=#FF0000] ???????????
    这是C#语法吗?
      

  2.   

           public bool userSel()        //判断是否存在了数据
            {
                if (UserArrayList==null || UserArrayList.Count == 0)              return false;
                else
                    return true;
            }
      

  3.   

    //缓存类,保存IO流中读到的用户信息
        
        class Temp
        {
           public  ArrayList arraylist = new ArrayList();
           public  ArrayList UserArrayList = new ArrayList();
            public void Write_Temp()
            {
                DB db = new DB();
                UserArrayList =db.Read();  
            }          public bool userSel()        //判断是否存在了数据
            {
                if (UserArrayList.Count == 0)         
      return false;
                else
                    return true;
            }
    是这些
      

  4.   


        class Temp
        {
           public  ArrayList arraylist = new ArrayList();
           public  ArrayList UserArrayList = new ArrayList();
            public void Write_Temp()
            {
                arraylist = new ArrayList();
                UserArrayList = new ArrayList();
                DB db = new DB();
                UserArrayList =db.Read();          }          public bool userSel()        //判断是否存在了数据
            {
                if(UserArrayList == null)
                    return false; 
                if (UserArrayList.Count == 0)         
      return false;
                else
                    return true;
            }
      

  5.   

    public void Write_Temp()
            {
                DB db = new DB();
                //这里应该缺少给db赋值的过程
                if(db!=null)
                {
                UserArrayList =db.Read();  
                }
            }
    }
      

  6.   

    public void Write_Temp()
            {
                DB db = new DB();
                //这里应该缺少给db赋值的过程
                  if(db!=null)
                {
                    UserArrayList =db.Read();   
                } 
            }上面代码有点乱
      

  7.   

    UserArrayList =db.Read();   问题出在这里吧?
      

  8.   

    很有必要的,如果db是空值的话则UserArrayList接收不到任何值
      

  9.   

    db.Read();  的返回值是什么类型?
    你确定是ArrayList类型才可以直接赋值的,如果是数组类型的,那就使用AddRange方法。UserArrayList.AddRange(db.Read());判断如下,避免异常。 public bool userSel()        //判断是否存在了数据
            {
                if(UserArrayList == null)
                    return false; 
                if (UserArrayList.Count == 0)         
      return false;
                else
                    return true;
            }
      

  10.   


    我那里的是io流数据        public ArrayList Read()
            {
                ArrayList arraylist=new ArrayList ();
                try
                {
                    FileStream fs = new FileStream("user.txt",FileMode.Open);
                    BinaryFormatter bf = new BinaryFormatter();
                    return arraylist = (ArrayList)bf.Deserialize(fs);
                    fs.Close();
                    
                }
                catch (Exception err)
                {
                    
                    return null;
                }        }
    这里不应该会错啊??
      

  11.   


    不管db是否为空  我都要UserArrayList接受到数据啊   即使是空的  ……db类中有public ArrayList Read() 方法
      

  12.   


    db.Read();也是arraylist类型的  
      

  13.   

        MessageBox.Show(err.ToString());
    应该是发生异常了,将上面的代码加到catch里面,看异常信息是什么?
      

  14.   

    Quote=引用 19 楼 xingyuebuyu 的回复:]
    MessageBox.Show(err.ToString());
    应该是发生异常了,将上面的代码加到catch里面,看异常信息是什么?
    [/Quote]-----------------------------------------
    System.Runtime.Serialization.SerializationException: 正在试图对空流进行反序列化
       在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
    (Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCr
    ossAppDomain, IMethodCallMessage methodCallMessage)
       在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
    (Stream serializationStream)
       在 Sale.IO.DB.Read() 位置 F:\杂集\桌面\桌面\个人消费(李黄)\个人消费(李黄)\Sal
    e\IO\DB.cs:行号 34未处理的异常:  System.NullReferenceException: 未将对象引用设置到对象的实例。
       在 Sale.Temp.userSel() 位置 F:\杂集\桌面\桌面\个人消费(李黄)\个人消费(李黄)\S
    ale\Temp.cs:行号 74
       在 Sale.Operate.DML.userSel() 位置 F:\杂集\桌面\桌面\个人消费(李黄)\个人消费(
    李黄)\Sale\Operate\DML.cs:行号 53
       在 Sale.Program.Main(String[] args) 位置 F:\杂集\桌面\桌面\个人消费(李黄)\个
    人消费(李黄)\Sale\Program.cs:行号 17
    请按任意键继续. . .这个就是它报错的
      

  15.   

     public  ArrayList arraylist = new ArrayList();
     public  ArrayList UserArrayList = new ArrayList();
    放到构造函数里去实例化
       public Temp()
       {
            ArrayList arraylist = new ArrayList();
            ArrayList UserArrayList = new ArrayList();
       }
    否则你在实例化对象Temp调用方法userSel() 时肯定报错!
      

  16.   

    你是不是先调用了 public void Write_Temp()
    然后里边有一个 UserArrayList =db.Read();  
    在这个地方,db.Read()是null,所以出错了
      

  17.   


    我放到里面,我怎么用arraylist的方法呢??  显示上下文中不存在……
      

  18.   


    空的话  不能赋给arraylist吗??
      

  19.   

    空的话可以赋给他,但是因为它是字段,所以在下个函数调用他的时候他还是null
    然后在这么调用UserArrayList.Count == 0就会报空引用异常了
      

  20.   


    就是说 在刚实例化的时候,arraylist不是为null类型的当arraylist为null的时候,使用arraylist.count  就会报错??是这个意思吧?
      

  21.   


    ArrayList arrayList = new ArrayList()
    分配内存了,不会报错了。。
      

  22.   

    正在试图对空流进行反序列化,你的文本user.txt里面是否没有内容啊.你在哪个地方有将序列化的内容存到文本user.txt里面的.
            public ArrayList Read()
            {
                ArrayList arraylist=new ArrayList ();
                try
                {
                    FileStream fs = new FileStream("user.txt",FileMode.Open);
                    
                    if(fs.Length==0)
                    {
                    fs.Close();
                    return null;
                    }                BinaryFormatter bf = new BinaryFormatter();
                    return arraylist = (ArrayList)bf.Deserialize(fs);
                    fs.Close();
                    
                }
                catch (Exception err)
                {
                    
                    return null;
                }        }
      

  23.   

     [color=#FF0000]应该是true或false吧
      

  24.   


    恩恩 这个代码 很好!解决了异常问题!问一下,我为什么第一次 走这段代码的时候,完全正常的,但是第二次走这段代码的时候就会报错,不会读取user.txt文本中的东西呢??
      

  25.   

    没有完整代码,不知道你在其它地方是否有对user.txt文本进行过操作.
    贴个完整代码看看.
      

  26.   

    class Program
        {
           
            static void Main(string[] args)
            {            DML dml = new DML();
                //dml.AllUser();
                dml.Read();
                bool  user = dml.userSel();//--------------------
                Console.WriteLine("----");
                if (user == false)//注册
                {
                    Register reg = new Register();
                    reg.userRegister();            }
                else//主菜单
                {
                    Menu m = new Menu();
                    m.mainMenu();
               } 
            }//这是我的主函数中的代码 public void mainMenu()
            {            Check check = new Check();
                DML dml = new DML();
                //Temp temp = new Temp();
                dml.Read();  //运行到这里就有问题了
                
    code]
    [code=C#]    class Temp
        {        ArrayList arraylist = new ArrayList();
            ArrayList UserArrayList = new ArrayList();
            DB db = new DB();        public void Read_Temp()
            {
                //if (db.Read() != null)
                //{
                    UserArrayList = db.Read();
              
            }//这个是我调用的类
      class DB
        {
            public void Write(ArrayList arraylist)  //写入文件写入
            {
                try
                {
                    FileStream fs = new FileStream("user.txt", FileMode.Create);
                    BinaryFormatter bf = new BinaryFormatter();
                    bf.Serialize(fs, arraylist);
                    fs.Close();
                    Console.WriteLine("写入成功!");
                }
                catch (Exception err)
                {
                    Console.WriteLine(err.ToString());
                }
            }        public ArrayList Read()
            {
                ArrayList arraylist = new ArrayList();
                try
                {
                    FileStream fs = new FileStream("user.txt", FileMode.Open);                if (fs.Length == 0)
                    {
                        fs.Close();
                        return null;
                    }                BinaryFormatter bf = new BinaryFormatter();
                    return arraylist = (ArrayList)bf.Deserialize(fs);
                    fs.Close();            }
                catch (Exception err)
                {                return null;
                }
                finally
                {
                    Console.WriteLine("txt中无数据!");
                }
            }这个是我的数据流类怎么会出现这样的错误呢??
      

  27.   

    DML 类没贴代码啊?
    没看到你有调用DB.Write的方法去序列化的存放内容.另外使用using的方式去操作文件流,这样在发生异常的情况下也可以保证文件流的资源有被释放掉.        class DB
            {
                public void Write(ArrayList arraylist)  //写入文件写入
                {
                    try
                    {
                        using(FileStream fs = new FileStream("user.txt", FileMode.Create))
                        {
                        BinaryFormatter bf = new BinaryFormatter();
                        bf.Serialize(fs, arraylist);
                        Console.WriteLine("写入成功!");
                        }
                    }
                    catch (Exception err)
                    {
                        Console.WriteLine(err.ToString());
                    }
                }            public ArrayList Read()
                {
                    ArrayList arraylist = new ArrayList();
                    try
                    {
                        using( FileStream fs = new FileStream("user.txt", FileMode.Open))
                        {
                        if (fs.Length == 0)
                        {
                            return null;
                        }
                        BinaryFormatter bf = new BinaryFormatter();
                        return arraylist = (ArrayList)bf.Deserialize(fs);
                        }
                    }
                    catch (Exception err)
                    {
                        Console.WriteLine(err.ToString());
                        return null;
                    }
                    finally
                    {
                        Console.WriteLine("txt中无数据!");
                    }
                }//这个是我的数据流类
            }
      

  28.   

            public void Write()  //写入用户名单
            {
                temp.Write();
            }        public void Read()   //读取用户名单
            {
                temp.Read_Temp();
            }这个是我dml类中的
    我用过了调用序列化内容的方法,在txt中现在生成了  这个大概是什么问题啊??
      

  29.   

    你的代码贴得都是一小段一小段的,这样看不出来你的流程是怎么走的,还是没有看到你在哪里调用dml.Write方法的.你在static void Main(string[] args)方法里直接就dml.Read(),那user.txt文本里的内容第一次是从哪来的?要把全部代码完整得贴出来,才能看清你程序的逻辑.