搜索ArrayList包含除两个提及值之外的任何其他值

时间:2015-03-12 12:46:18

标签: c# asp.net .net asp.net-mvc-4 arraylist

我必须搜索ArrayList是否除了这两个值之外还添加了任何其他值:

样品: 有两个值:Test1 & Test2 如果arraylist包含除这两个值之外的任何其他值。然后它应该返回true。

到目前为止我尝试了什么:

public static bool checkOtherValue(ArrayList arr)
{
    string[] vals = new string[5] { "Test3", "Test4", "Test5", "Test6", "Test7" };
    bool check = false;
    for (int i = 0; i < 5; i++)
    {
        if (arr.Contains(vals[i]))
        {
            check = true;
            break;
        }
    }
    return check;
}

这将检查数组并返回arraylist是否包含字符串数组中的任何提及字符串。但我相信应该采用最短的方式。

,例如ArrayList.Find("Test1","Test2") == false;

这个功能对我有用:

public static bool ContainsAny(this ArrayList arr,params string[] values)
{
    bool check = false;
    if (arr.Count > 2)
    {
        check = false;
    }
    else
    {
        if (arr.Count > 1 && arr.Count <= 2)
        {
            if ((arr[0].ToString().ToLower().Trim() == values[0].ToLower().Trim() || arr[0].ToString().ToLower().Trim() == values[0].ToLower().Trim()) &&
               (arr[1].ToString().ToLower().Trim() == values[1].ToLower().Trim() || arr[1].ToString().ToLower().Trim() == values[1].ToLower().Trim()))
                check = true;
            else
                check = false;
        }
        else
        {
            //default value[0]
            if ((arr[0].ToString().ToLower().Trim() == values[0].ToLower().Trim() || arr[0].ToString().ToLower().Trim() == values[0].ToLower().Trim()))
                check = true;
            else
                check = false;
        }
    }

    return check;
}

2 个答案:

答案 0 :(得分:3)

您可以编写扩展方法:

public static bool ContainsAny(this ArrayList arr, params string[] values)
{
     return arr.OfType<string>().Any(values.Contains);
} 

并像这样使用它:

yourArrayList.ContainsAny("Test1","Test2");

但如果您不必使用List<T>,我强烈建议您使用ArrayList等类型安全集合。

答案 1 :(得分:0)

  

样本:有两个值:如果arraylist包含任何值,则为Test1和Test2   除了这两个值之外的其他值。那应该   返回true。

如果我是正确的话,则可以改写为:如果不是arraylist中的所有值都在测试值中,则返回true。

如果正确,则检查可以简化为:

public static bool ContainsAny(this ArrayList arr, params string[] values)
{
     return !arr.OfType<string>().All(values.Contains);
}