【问题标题】:Searching string in arraylist [closed]在arraylist中搜索字符串[关闭]
【发布时间】:2013-12-03 07:49:54
【问题描述】:
class Program
{      
    static void Main(string[] args)
    {
        string ss = "1,2,3";           
        string search = "2";
        ArrayList a = new ArrayList();
        a.Add(ss.Split(','));
        if (a.Contains(search))
        {
            Console.WriteLine("true");
        }
        else
        {
            Console.WriteLine("false");
        }
    }
}

【问题讨论】:

  • 问题是什么?
  • 输出为 false 。为什么 ?我在 ArrayList 中搜索相同的字符串..请帮助
  • 明星们说这个问题是什么颜色?
  • 虽然我们感谢您提供的代码,但您实际上并没有提出任何问题,这就是 SO 的重点。问题是什么,您做了什么来尝试解决它。​​

标签: c# .net


【解决方案1】:

您正在向ArrayList 添加一个字符串数组。 String.Split() 的返回值为string[],因为ArrayList 是无类型的,您可以添加任何类型的对象(甚至是不同类型的对象)。

改变这个:

a.Add(ss.Split(','));

到这里:

a.AddRange(ss.Split(','));

如前所述,ArrayList 没有为它的项目输入类型(它拥有通用的objects)。这意味着你可以这样做:

a.Add(1);
a.Add("blue");
a.Add(AppDomain.CurrentDomain);
a.Add(new System.Windows.Forms.Control());
a.Add(new string[] { "red", "blue" });

在这种情况下,像a.Contains("red") 这样的搜索将返回false,因为a 包含一个字符串数组,并且搜索是针对项目执行的,而不是针对它们的内容。例如:

string[] values = ss.Split(',');
a.Add(values);

bool x = a.Contains("2"); // false
bool y = a.Contains(values); // true

AddRange 方法执行如下操作:

foreach (string value in values)
    a.Add(value);

这样a 包含数组中的项目,而不是数组本身。

小提示
如果您正在学习 C#,我会避免压缩代码,请更加冗长地查看您在做什么:

string[] values = ss.Split(',');
a.AddRange(values);

您的收藏中的内容更加明显。第二步是使用泛型集合(强类型):

List<string> a = new List<string>();
a.AddRange(values); // OK
a.Add(values); // Compiler error

在这种情况下,如果您尝试添加错误类型的对象,编译器将发出错误。

【讨论】:

  • 谢谢 ADRIANO ...你能解释一下为什么会这样吗?
  • @user3007228 我添加了更多示例,希望我已经足够清楚了!
【解决方案2】:

尽量避免使用 ArrayList 和其他过时的类;使用通用 集合,例如List&lt;String&gt;:他们更安全;在你的情况下:

   List<String> a = new List<String>();

   // If you try erroneous "a.Add(ss.Split(','))" here
   // it'll be compile time error instead of misterious run time misbehaviour
   a.AddRange(ss.Split(','));

   if (a.Contains(search))
     Console.WriteLine("true");
   else
     Console.WriteLine("false");

通过使用 Linq,您可以将搜索放在一行中:

class Program {      
  static void Main(string[] args) {
    String ss = "1,2,3";
    String search = "2";

    Console.WriteLine(ss.Split(',').Contains(search) ? "true" : "false");
  }
}

【讨论】:

    【解决方案3】:

    这是修改后的代码供您参考。

    class Program
    {      
        static void Main(string[] args)
        {
            string ss = "1,2,3";           
            string search = "2";
            string[] arr = ss.Split(',');
    
            foreach(string ar in arr)
                {
                if (ar.Equals(search))
                    {
                    Console.WriteLine("true");
                    }
                else
                    {
                    Console.WriteLine("false");
                    }
                }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 2011-12-16
      • 2020-07-27
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多