public static byte[] byAlarmCmd = System.Text.Encoding.ASCII.GetBytes("RTRV-ALRMS:::RALRMS;");
public ArrayList ar = new Arraylist();private void test1()
{
  ar.Add(byAlarmCmd);
  bool bExist = ar.Contains(byAlarmCmd);   //得到true
}
1、为何能得到true?
2、是因为变量byAlarmCmd定义成static的缘故吗?private void test2()
{
  byte[] byCmd = System.Text.Encoding.ASCII.GetBytes("RTRV-ALRMS:::RALRMS;");
  if (!ar.Contains())  //得到false,为什么?
    ar.Add(byCmd);
}
1、多次调用test(),为何总是得到false?
2、ArrayList的内容为字节数组的Contains方法有何特殊性吗?

解决方案 »

  1.   

    1、为何能得到true?
    2、是因为变量byAlarmCmd定义成static的缘故吗?因为ArrayList 存储的是object数组(实现了动态效果而已,存储还是数组),byAlarmCmd这个变量是静态数组的引用,Add方法是往数组中添加了一个引用。
    Contains(byAlarmCmd),你刚添加过。当然存在
      

  2.   

    那test2()部分的现象,该如何解释呢?
      

  3.   

    private void test2()
    {
      byte[] byCmd = System.Text.Encoding.ASCII.GetBytes("RTRV-ALRMS:::RALRMS;");
      if (!ar.Contains()) //得到false,为什么?
      ar.Add(byCmd);
    }
    1、多次调用test(),为何总是得到false?
    2、ArrayList的内容为字节数组的Contains方法有何特殊性吗?
    你在判断语句中并没有指定ArrayList是否存在某个元素,返回的当然是False了啊2.没有特殊性
      

  4.   

    private void test2()
    {
      byte[] byCmd = System.Text.Encoding.ASCII.GetBytes("RTRV-ALRMS:::RALRMS;");//拿了一个豆子
      if (!ar.Contains()) //看我拿的豆子在不在碗里
      ar.Add(byCmd);//把豆子放碗里
    }byte[] b = System.Text.Encoding.ASCII.GetBytes("RTRV-ALRMS:::RALRMS;");//拿了一个豆子
    private void test3()
    {
      if (!ar.Contains(b)) //看我拿的豆子在不在碗里
      ar.Add(b);//把豆子放碗里
    }test2你在不停的拿新豆子
    test3你只拿了一个豆子
      

  5.   

    可能是我没说清楚,我的意思是:
    public ArrayList ar = new Arraylist();private void test()
    {
      byte[] b= System.Text.Encoding.ASCII.GetBytes("RTRV-ALRMS:::RALRMS;");
      if (!ar.Contains(b)) //总是得到false,为什么?
        ar.Add(b);
    }问题是:
    1、多次调用test(),为何判断语句if总是得到false?
    2、ArrayList的内容为字节数组的Contains方法有何特殊性吗?
      

  6.   

    byte[] 是引用类型,不是你想象的和byte一样
    数组都是引用类型