繁体   English   中英

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

[英]check if item contain in list

我有一个带有Debug.writeLine的已安装程序列表,我可以在 output 中看到有一个 discord 项目。 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);

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM