我有一个已安装程序的列表
使用 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);
我有正确的报告,但问题是没有检测到其他程序
答案 0 :(得分:0)
这是行不通的,因为 isInstalled
是通过迭代设置的。
所以最后一个 installedItem
可以将值设置为 false。
本质上,这 isInstalled
只与最后一项相关。
如果您想使用此代码,只需删除 else。
如果你想使用 linq,我会这样做
isInstalled = _installedApps.Any(i=>i.DisplayName.Trim().Contains(result.PackageName.Trim()))