[英]Converting types in c#
沒有foreach,有沒有更好的方式編寫此代碼? 我想從類型為int的IEnumerable中添加項目(管轄區),並將其轉換為包含屬性Ref的IList,應在此處進行設置。
public class TrackDataFilter
{
public TrackDataFilter(IEnumerable<int> firmRef, int? superSectorRef, DateTime from, DateTime to, int userFirmRef) : this()
{
Firms = firmRef.Select(x => new TrackFilterGenericRef { Ref = x, Type = ContentTypes.Firm, Description = "" });
SuperSectorRef = superSectorRef;
From = from;
To = to;
UserFirmRef = userFirmRef;
}
public TrackDataFilter()
{
Workareas = new List<TrackFilterGenericRef>();
Jurisdictions = new List<TrackFilterGenericRef>();
Tags = new List<TrackFilterGenericRef>();
Firms = Enumerable.Empty<TrackFilterGenericRef>();
}
public IList<TrackFilterGenericRef> Jurisdictions { get; set; }
...
}
public class TaxiBriefingFilter
{
public IEnumerable<int> Jurisdictions { get; set; }
...
}
// add items in IEnumerable<int> Jurisdictions into IList<TrackFilterGenericRef>
var filter = new TaxiBriefingFilter();
var dataFilter = new TrackDataFilter(new int[] { companyId }, null, from, to, userFirmRef);
foreach (var jurisdictionRef in filter.Jurisdictions)
{
dataFilter.Jurisdictions.Add(new TrackFilterGenericRef { Ref = jurisdictionRef});
}
var jurisdictions = trackAnalyticsService.GetJurisdictions(dataFilter, maxJurisdictions);
...
您可以使用LINQ表示相同的邏輯,但是在這種情況下,我認為它不容易閱讀。 性能應該大致相同。
using System.Linq;
...
var filter = new TaxiBriefingFilter();
var dataFilter = new TrackDataFilter(new int[] { companyId }, null, from, to, userFirmRef);
dataFilter.Jurisdictions.AddRange(
filter.Jurisdictions.Select(jref => new TrackFilterGenericRef { Ref = jref }));
你的意思是
using System.Linq;
...
Jurisdictions = Firms.ToList();
要么
Jurisdictions = firmRef.Select(x => new TrackFilterGenericRef { Ref = x, Type = ContentTypes.Firm, Description = "" }).ToList();
?
在第一個示例中,您將獲得具有與“可枚舉的Firms
”中相同實例的列表。 在第二個中,您將在“ Jurisdictions
列表中獲得包含新實例的列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.