C# 使类可数

C# 使类可数,c#,asp.net-mvc,visual-studio,class,ienumerable,C#,Asp.net Mvc,Visual Studio,Class,Ienumerable,我有以下课程 namespace TaxiResults.Model { public class SearchResult { public string status { get; set; } public SearchResultResult result { get; set; } } public class SearchResultResult { public SearchResultOffer offer { get; set; } } publi

我有以下课程

namespace TaxiResults.Model
{

public class SearchResult
{
    public string status { get; set; }
    public SearchResultResult result { get; set; }
}

public class SearchResultResult
{
    public SearchResultOffer offer { get; set; }
}

public class SearchResultOffer
{
    public SearchResultOffer1[] offers { get; set; }
}

public class SearchResultOffer1
{
    public SearchResultAddress[] addresses { get; set; }
    public string chnl { get; set; }
    public string companyInfoId { get; set; }
    public string companyName { get; set; }
    public string bookingId { get; set; }
    public string tz { get; set; }
    public string pickupDateTime { get; set; }
    public string pickupDateTimeUTC { get; set; }
    public int routeDuration { get; set; }
    public int routeDistance { get; set; }
    public SearchResultPricedetail priceDetail { get; set; }
    public float tax { get; set; }
    public string services { get; set; }
    public int bagCount { get; set; }
    public int passengerCount { get; set; }
    public int productType { get; set; }
    public string resultset { get; set; }
    public string companyInfoId3cd { get; set; }
}

public class SearchResultPricedetail
{
    public SearchResultOriginalprice originalPrice { get; set; }
    public SearchResultFinalprice finalPrice { get; set; }
}

public class SearchResultOriginalprice
{
    public SearchResultAmount[] amounts { get; set; }
}

public class SearchResultAmount
{
    public string currency { get; set; }
    public string priceExcludingTax { get; set; }
    public float priceExcludingTaxNumber { get; set; }
    public string priceTotal { get; set; }
    public float priceTotalNumber { get; set; }
    public float exchangeRate { get; set; }
    public string priceTax { get; set; }
    public float priceTaxNumber { get; set; }
}

public class SearchResultFinalprice
{
    public SearchResultAmount1[] amounts { get; set; }
}

public class SearchResultAmount1
{
    public string currency { get; set; }
    public string priceExcludingTax { get; set; }
    public float priceExcludingTaxNumber { get; set; }
    public double priceTotal { get; set; }
    public float priceTotalNumber { get; set; }
    public float exchangeRate { get; set; }
    public string priceTax { get; set; }
    public float priceTaxNumber { get; set; }
}

public class SearchResultAddress
{
    public SearchResultLocation location { get; set; }
    public string address { get; set; }
    public int type { get; set; }
}

public class SearchResultLocation
{
    public float lat { get; set; }
    public float lng { get; set; }
}

}
我想在
Taxi.Model.SearchResult
上做一个foreach循环,将它输入到我在MVC视图中返回的模型中

但我得到了一个错误:

foreach语句无法对“Taxi.Model.SearchResult”类型的变量进行操作,因为“Taxi.Model.SearchResult”不包含“GetEnumerator”的公共定义

我是新来c#net的,谁能告诉我需要做什么才能让我做一个foreach吗


谢谢

最简单的方法就是枚举
提供的
属性,如下所示:

SearchResultOffer searchResults = ...
foreach(var result in searchResults.offers)
{
    ...
}
但是为了能够通过
SearchResultOffer
本身进行枚举,您必须实现
IEnumerable
接口:

public class SearchResultOffer : IEnumerable<SearchResultOffer1>
{
    public SearchResultOffer1[] offers { get; set; }

    // Generic version for IEnumerable<T>
    public IEnumerator<SearchResultOffer1> GetEnumerator() 
    {
        return offers.Cast<SearchResultOffer1>().GetEnumerator();
    }

    // Non-generic version for IEnumerable
    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator(); // calls the generic version
    }
}

最简单的方法就是枚举
offers
属性,如下所示:

SearchResultOffer searchResults = ...
foreach(var result in searchResults.offers)
{
    ...
}
但是为了能够通过
SearchResultOffer
本身进行枚举,您必须实现
IEnumerable
接口:

public class SearchResultOffer : IEnumerable<SearchResultOffer1>
{
    public SearchResultOffer1[] offers { get; set; }

    // Generic version for IEnumerable<T>
    public IEnumerator<SearchResultOffer1> GetEnumerator() 
    {
        return offers.Cast<SearchResultOffer1>().GetEnumerator();
    }

    // Non-generic version for IEnumerable
    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator(); // calls the generic version
    }
}

您应该实现
IEnumerable
IEnumerable
来支持foreach。

您应该实现
IEnumerable
IEnumerable
来支持foreach。

查看您提供的代码,看起来
搜索结果
类实际上是底层实体的单个实例,而不是像这样的收藏。您可能需要声明一个
列表来存储所有结果,然后在该列表上使用
foreach

查看您提供的代码,看起来
SearchResult
类实际上是底层实体的一个实例,而不是一个集合。您可能需要声明一个
列表
来存储所有结果,然后在该列表上使用
foreach

您好,非常感谢您的帮助。我向项目中添加了一个新类,并添加了公共类SearchResultOffer,但我发现了4个错误:“Taxi.Model.SearchResultOffer.offers”和“CabForce.Model.SearchResultOffer.offers”之间存在歧义,无法隐式地将类型“System.Collections.IEnumerator”转换为“System.Collections.Generic.IEnumerator”。使用泛型类型“System.Collections.generic.IEnumerable”存在显式转换(是否缺少强制转换?)需要1个类型arguments@TrevorDaniel我认为第一个错误是由于名称空间冲突——在不同的名称空间中有两个同名的类,而在第三个类中,您试图引用这两个类。要解决这个问题,您必须完全使用@TrevorDaniel或@TrevorDaniel,第二个错误是我的错。我忘记了数组不实现
IEnumerable
,只实现
IEnumerable
。请参阅我的更新答案以了解修复方法。只是想修复一个常见的误解。为了枚举,您不需要尝试枚举的类来实现IEnumerable,只需要它包含一个公共方法:IEnumerator GetEnumerator()。IEnumerable接口只是帮助实现这一点。嗨,非常感谢你的帮助。我向项目中添加了一个新类,并添加了公共类SearchResultOffer,但我发现了4个错误:“Taxi.Model.SearchResultOffer.offers”和“CabForce.Model.SearchResultOffer.offers”之间存在歧义,无法隐式地将类型“System.Collections.IEnumerator”转换为“System.Collections.Generic.IEnumerator”。使用泛型类型“System.Collections.generic.IEnumerable”存在显式转换(是否缺少强制转换?)需要1个类型arguments@TrevorDaniel我认为第一个错误是由于名称空间冲突——在不同的名称空间中有两个同名的类,而在第三个类中,您试图引用这两个类。要解决这个问题,您必须完全使用@TrevorDaniel或@TrevorDaniel,第二个错误是我的错。我忘记了数组不实现
IEnumerable
,只实现
IEnumerable
。请参阅我的更新答案以了解修复方法。只是想修复一个常见的误解。为了枚举,您不需要尝试枚举的类来实现IEnumerable,只需要它包含一个公共方法:IEnumerator GetEnumerator()。IEnumerable接口只是帮助实现这一点。