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接口只是帮助实现这一点。