[英]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.