使用Xamarin时未定义List(T).ForEach函数

9

我从我的朋友那里得到了一些代码,它在Windows Forms应用程序中运行得很好。

但当我尝试在Xamarin.Forms项目中使用相同的代码时,它显示:

'System.Collections.Generic.List'没有定义ForEach。(可能缺少“using”指令)

我已经:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Xamarin.Forms;
using System.Reflection;

以下是导致错误的代码:

public Company GetCompanyById(int companyId) {
        Company company = new Company();

        allContinents
             .MyContinents
             .Select(x => x.Countries)
             .ToList()
             .ForEach(countryList => {
                 countryList.ForEach(country => {
                     country.Cities.ForEach(city => {
                         city.Companies.ForEach(com => {
                             if (com.Id.Equals(companyId))
                                 company = com;
                         });
                     });
                 });
             });
        return company;
    }

为什么它在 Windows.Forms 应用程序中能运行而在此处却无法运行? PS:第一个 ForEach 被蓝色下划线标注。 谢谢。

一切都是最新的 - .NET 4.5 - Visual Studio 2013旗舰版和Xamarin.iOs和Xamarin.Android以及Xamarin.Forms NuGet已更新。 - Hendrik
2个回答

15

你正在使用 .NET 的可移植类库子集,其中不包括 List<T>.ForEach

个人而言,我并不喜欢这种方法 - 在我看来,更好的方式是使用 LINQ 来选择正确的公司。毕竟,您正在执行一个 查询...

return allContinents.MyContinents
                    .SelectMany(x => x.Countries)
                    .SelectMany(c => c.Cities)
                    .SelectMany(c => c.Companies)
                    .First(c => c.Id == companyId);

1
感谢您。并且总会有匹配项,因为用户只能从列表视图中选择一些数据,并且这些值将作为CompanyId给出。 - Hendrik
1
@Hendrik:好的 - 在这种情况下,我将更改我的示例代码,以便在违反该假设时抛出异常。 - Jon Skeet

15

如果您无法离开它,可以定义自己的ForEach扩展方法

public static class IEnumerableExtensions
{
    public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
    {
        foreach(T item in enumeration)
        {
            action(item);
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接