我有List
中的项目,我希望得到索引不等于某事的所有项目,
说它是按钮List<Button>
的列表。如何使用以下内容获取index
以外的索引的按钮。
var buttons = buttonList.Where(b => b<indexOfbutton> != index);
更新
我想把<indexOfButton>
放在一行。所以我假设有另一个linq查询从buttonList获取按钮索引?
最终目标是获取不包含相关索引的List。
答案 0 :(得分:3)
您可以在lambda表达式中指定索引,因为Where
方法的另一个重载需要Func<TSource, int, bool>
:
System.Func<TSource, Int32, Boolean>
测试条件的每个源元素的函数; 第二个 函数的参数表示源元素的索引。
var buttons = buttonList.Where((b,idx) => idx != index);
您还可以为此编写扩展方法:
public static class Extensions
{
public static IEnumerable<T> SkipIndex<T>(this IEnumerable<T> source, int index)
{
int counter = 0;
foreach (var item in source)
{
if (counter != index)
yield return item;
counter++;
}
}
}
并使用它:
var buttons = buttonList.SkipIndex(index).ToList();
如果你想获得带有索引的按钮:
var buttons = buttonList
.Select((b,idx) => new { Button = b, Index = idx })
.Where(x => x.Index != index)
.ToList();
这将返回一个包含两个属性的匿名类型列表,其中一个是您的按钮,另一个是它的索引。
答案 1 :(得分:2)
如果我有丢弃列表(如果我不需要原始列表而只列出没有元素的列表)并且buttonList是IList<>
,我会使用像
buttonList.RemoveAt(index);