我怎样才能建立这个的手动版本?
How can I build a manual version of this?
我有一个名为 Package
的 class,它包含 List<string>
和 string
成员,对应于依赖项列表和包的名称。它覆盖 Equals()
,提供基于 Package
名称的相等性。我正在尝试构建此行的手动版本:
Uninstallable.RemoveAll(pkg => Installable.Contains(pkg));
其中 Uninstallable
和 Installable
是 List<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));
}
我有一个名为 Package
的 class,它包含 List<string>
和 string
成员,对应于依赖项列表和包的名称。它覆盖 Equals()
,提供基于 Package
名称的相等性。我正在尝试构建此行的手动版本:
Uninstallable.RemoveAll(pkg => Installable.Contains(pkg));
其中 Uninstallable
和 Installable
是 List<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));
}