c# - 如何在列表中列出具有不为空的字段的元素编号?

标签 c# linq

我有一个我获得的列表,它为我提供了 phraseSources 的所有元素,其中 MSoftMeaning 属性为 null 或为空:

public class PhraseSource
{
    [PrimaryKey]
    public string Id { get; set; }
    public int PhraseNum { get; set; }
    public string MSoftMeaning { get; set; 
}

public static List<PhraseSource> phraseSources;

var pList = phraseSources.Where(x => string.IsNullOrEmpty(x.MSoftMeaning));

我想做的不是获取行,而是获取列表或所有行号的数组(称为索引),其中列表元素的 MSoftMeaning 为 null。

因此,例如,如果第一行和第三行的 MSoftMeaning 为 null,那么我希望得到一个类似于 (1,3) 或 [1,3] 的列表。

最佳答案

可以先抓取索引,然后过滤再选择原始索引:

var pList = phraseSources
  .Select((item, i) => new {index = i, item = item}) // capture
  .Where(x => string.IsNullOrEmpty(x.item.MSoftMeaning)) // filter
  .Select(p => p.index) // select only indexes
  .ToList(); // or use ToArray()

您需要先在 Where 之前使用 Select 捕获索引,否则在最后一个 Select 中您将获得新列表。

关于c# - 如何在列表中列出具有不为空的字段的元素编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58144481/

相关文章:

c# - 热可观察和 IDisposable

使用 PictureBox 的 C# 碰撞检测

c# - 如何从数据表中获取最高值?

c# - 使用导致异常的表达式过滤 EfCore DbSet

xml - 使用 Linq to XML 检查 XML 子元素是否存在

C# 组合框显示空白项

c# - 在连接字符串中设置到数据源的方式

c# - 当属性 getter/setter 需要 LinkDemand 时,如何安抚 FxCop?

C# LINQ 按如下所示格式的对象列表进行分组

c# - 使用linq C#从另一个数组中的数组中查找和计数