检查项目是否包含在列表中

时间:2021-04-13 11:29:35

标签: c# list linq

我有一个已安装程序的列表 使用 Debug.writeLine 我可以在输出中看到有一个不和谐的项目。 result.PackageName 可以是 Discrod、Discord PTB 或 Discord Canary。

foreach (var installedItem in _installedApps)
{
  if (installedItem.DisplayName.Contains("Discord"))
  {
    Debug.WriteLine(installedItem.DisplayName);
    Debug.WriteLine(result.PackageName);
  }

  if (installedItem.DisplayName.Trim().Contains(result.PackageName.Trim()))
  {
    isInstalled = true;
  }
  else
  {
   isInstalled = false;
  }
}

但是代码不起作用,总是返回false

更新:

如果我使用下面的代码

var installedStatus = _installedApps.Where(x => x.DisplayName != null && result.PackageName != null && x.DisplayName.Contains(result.PackageName, StringComparison.OrdinalIgnoreCase)).Any();

并且在_installedApps 列表中,只有一项名为Discord PTB 并且还在循环中,即PackageName Discrod、Discrod PTB 或Discrod Canary。

我有一个错误的报告说两个版本都安装了 只有 PTB 应该有安装报告。

但是如果我使用下面的代码

                                var installedStatus = _installedApps.Where(x => x.DisplayName != null && result.PackageName != null && result.PackageName.Contains(x.DisplayName, StringComparison.OrdinalIgnoreCase)).Select(x => x.Version);

我有正确的报告,但问题是没有检测到其他程序

1 个答案:

答案 0 :(得分:0)

这是行不通的,因为 isInstalled 是通过迭代设置的。
所以最后一个 installedItem 可以将值设置为 false。
本质上,这 isInstalled 只与最后一项相关。 如果您想使用此代码,只需删除 else。

如果你想使用 linq,我会这样做

isInstalled = _installedApps.Any(i=>i.DisplayName.Trim().Contains(result.PackageName.Trim()))