2

当我在第二个 if 中使用硬编码的“4”时,它可以工作。但我有一个动态字符串 [] ProfileArray 并想检查 View08ListBox1Item 的值是否包含/不包含 ProfileArray 中的字符串之一。为什么它不起作用,当我对字符串 [] ProfileArray 更改“4”时?

全球的:

static string[] ProfileArray;


case "Profile":
            foreach (ListItem View08ListBox1Item in View08ListBox1.Items)
            {
                if (View08ListBox1Item.Selected)
                {
                    if (!View08ListBox1Item.Value.ToString().Contains("4"))
                    {
                        //:do something
                    }
                    else
                    {
                        //:do something
                    }
                }
            }
            break;

这是我的第一个想法,但它不起作用:

case "Profile":
            foreach (ListItem View08ListBox1Item in View08ListBox1.Items)
            {
                if (View08ListBox1Item.Selected)
                {
                    if (!View08ListBox1Item.Value.ToString().Contains(ProfileArray))
                    {
                        //:do something
                    }
                    else
                    {
                        //:do something
                    }
                }
            }
            break;
4

4 回答 4

6

你可以使用 Linq

ProfileArray.Any(x => x == View08ListBoxItem.Value.ToString())  //Contains
!ProfileArray.Any(x => x == View08ListBoxItem.Value.ToString()) //doesn't contain

非 linq 扩展

public static bool Contains<T>(this T[] array, T value) where T : class
{
   foreach(var s in array)
   {
      if(s == value)
      {
         return true;
      }

   }
  return false;
}
ProfileArray.Contains(View08ListBoxItem.Value.ToString());
于 2013-08-14T15:30:08.980 回答
2

因为 ProfileArray 是一个数组而不是一个字符串。

ProfileArray.Any(x => x == View08ListBox1Item.Value.ToString())

我认为这可以工作。

在 .NET 2.0 中,您可以使用

Array.IndexOf(ProfileArray, View08ListBox1Item.Value.ToString()) == -1

请参阅http://msdn.microsoft.com/en-us/library/eha9t187%28v=vs.80%29.aspx

于 2013-08-14T15:29:20.717 回答
1

一个字符串不能包含一个数组。它反过来。

您也可以使用非 linq 方式ProfileArray.Contains(View08ListBox1Item.Value.ToString())

于 2013-08-14T15:33:03.630 回答
1

可能是这样的?

    bool found = false;
    for ( int i=0; i < ProfileArray.Length; i++)
    {
        if (View08ListBox1.SelectedItem.Value.ToString().Contains(ProfileArray[i])
        {
            found = true;
            break;
        }
    }

如图所示,也无需迭代列表框。

于 2013-08-14T15:36:50.777 回答