我怎样才能建立这个的手动版本?

How can I build a manual version of this?

我有一个名为 Package 的 class,它包含 List<string>string 成员,对应于依赖项列表和包的名称。它覆盖 Equals(),提供基于 Package 名称的相等性。我正在尝试构建此行的手动版本:

Uninstallable.RemoveAll(pkg => Installable.Contains(pkg));

其中 UninstallableInstallableList<Package>

我对 Contains() 方法的尝试:

public static bool MyContains(this List<Package> packages, Package inPkg)
{
    foreach (Package pkg in packages)
    {
        if (pkg.Equals(inPkg))
        {
            return true;
        }
    }

    return false;
}

如何使用此扩展方法构建与上述行相同的功能,但没有 lambda?

您可以使用这个 foreach 循环:

foreach ( var item in Uninstallable.ToList() )
  if ( Installable.MyContains(item ) )
    Uninstallable.Remove(item)

我们需要调用ToList因为我们要修改Uninstallable.

否则你可以使用 for 循环:

for ( int index = Uninstallable.Count - 1; index >= 0; index-- )
  if ( Installable.MyContains(Uninstallable[index]) )
    Uninstallable.RemoveAt(index);

因为我们向下计数删除项目没有问题。

这是一个如何简化扩展程序的示例。

public static bool MyContains(this List<Package> packages, Package inPkg)
{
    return packages.Any(x => x.Equals(inPkg));
}