我想在Textboxes数组中找到一个特定的Textbox,并返回它的索引。
此行找到相关控件:
TextBox tb1 = Array.Find(m_dynamicTextBoxes, element => element.ID == strFieldId);
我想找到它的索引,我可以用类似的替换这个控件。检测到错误,因此我计划将BorderColor更改为红色。
答案 0 :(得分:1)
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.
}