//缓存类,保存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;
}我该怎么解决??
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;
}我该怎么解决??
这是C#语法吗?
{
if (UserArrayList==null || UserArrayList.Count == 0) return false;
else
return true;
}
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;
}
是这些
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;
}
{
DB db = new DB();
//这里应该缺少给db赋值的过程
if(db!=null)
{
UserArrayList =db.Read();
}
}
}
{
DB db = new DB();
//这里应该缺少给db赋值的过程
if(db!=null)
{
UserArrayList =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;
}
我那里的是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;
} }
这里不应该会错啊??
不管db是否为空 我都要UserArrayList接受到数据啊 即使是空的 ……db类中有public ArrayList Read() 方法
db.Read();也是arraylist类型的
应该是发生异常了,将上面的代码加到catch里面,看异常信息是什么?
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
请按任意键继续. . .这个就是它报错的
public ArrayList UserArrayList = new ArrayList();
放到构造函数里去实例化
public Temp()
{
ArrayList arraylist = new ArrayList();
ArrayList UserArrayList = new ArrayList();
}
否则你在实例化对象Temp调用方法userSel() 时肯定报错!
然后里边有一个 UserArrayList =db.Read();
在这个地方,db.Read()是null,所以出错了
我放到里面,我怎么用arraylist的方法呢?? 显示上下文中不存在……
空的话 不能赋给arraylist吗??
然后在这么调用UserArrayList.Count == 0就会报空引用异常了
就是说 在刚实例化的时候,arraylist不是为null类型的当arraylist为null的时候,使用arraylist.count 就会报错??是这个意思吧?
ArrayList arrayList = new ArrayList()
分配内存了,不会报错了。。
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;
} }
恩恩 这个代码 很好!解决了异常问题!问一下,我为什么第一次 走这段代码的时候,完全正常的,但是第二次走这段代码的时候就会报错,不会读取user.txt文本中的东西呢??
贴个完整代码看看.
{
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中无数据!");
}
}这个是我的数据流类怎么会出现这样的错误呢??
没看到你有调用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中无数据!");
}
}//这个是我的数据流类
}
{
temp.Write();
} public void Read() //读取用户名单
{
temp.Read_Temp();
}这个是我dml类中的
我用过了调用序列化内容的方法,在txt中现在生成了 这个大概是什么问题啊??