ASP.NET / C# - 在数组中查找条目并获取它的索引

时间:2014-03-03 16:59:19

标签: c# asp.net

我想在Textboxes数组中找到一个特定的Textbox,并返回它的索引。

此行找到相关控件:

    TextBox tb1 = Array.Find(m_dynamicTextBoxes, element => element.ID == strFieldId);

我想找到它的索引,我可以用类似的替换这个控件。检测到错误,因此我计划将BorderColor更改为红色。

2 个答案:

答案 0 :(得分:1)

使用Array.FindIndex

var index =  Array.FindIndex(m_dynamicTextBoxes, element => element.ID == strFieldId);

如果您只想更改BackColor,则可以使用查询并更改找到的TextBox上的颜色

tb1.BackColor = Color.Red;

答案 1 :(得分:0)

简单的LINQ扩展:

public static class LinqExtensions
{
  public static int? IndexOfOrNull<T>( this IEnumerable<T> list , Func<T,bool> isDesired  )
  {
    int  i       = 0     ;
    bool desired = false ;
    foreach ( T item in list )
    {
      desired = isDesired(item) ;
      if ( desired ) break ;
      ++i ;
    }
    return desired ? i : (int?)null ;
  }
  public static int IndexOf<T>( this IEnumerable<T> list , Func<T,bool> isDesired )
  {
    int? index = IndexOfOrNull( list , isDesired ) ;
    if ( !index.HasValue ) throw new InvalidOperationException() ;
    return index.Value ;
  }

}

或者你可以写一个类似的扩展来进行就地替换并返回被替换的项目:

public static T Replace<T>( this T[] list , Func<T,bool> isDesired , T replacement ) where T:class
{
  T replacedItem = null ;
  for ( int i = 0 ; replacedItem == null && i < list.Length ; ++i )
  {
    T item = list[i] ;
    bool desired = isDesired(item) ;
    if ( desired )
    {
      replacedItem = item ;
      list[i]      = replacement ;
    }
  }
  return replacedItem ; // the replaced item or null if no replacements were made.
}