【问题标题】:Converting types in c#在 C# 中转换类型
【发布时间】:2019-01-09 06:21:02
【问题描述】:

有没有更好的方法在没有 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);
...

【问题讨论】:

    标签: c# list foreach filter model


    【解决方案1】:

    您可以使用 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 }));
    

    【讨论】:

      【解决方案2】:

      你是说

      using System.Linq;
      ...
      Jurisdictions = Firms.ToList();
      

      Jurisdictions = firmRef.Select(x => new TrackFilterGenericRef { Ref = x, Type = ContentTypes.Firm, Description = "" }).ToList();
      

      ?

      在第一个示例中,您将获得一个与Firms 枚举具有相同实例的列表。 在第二个中,您将在Jurisdictions 列表中获得一个包含新实例的列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-17
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多