【问题标题】:How do you refactor C# code that returns a List<T>?如何重构返回 List<T> 的 C# 代码?
【发布时间】:2020-10-23 14:14:44
【问题描述】:

我发现我多次重复此代码,并且希望得到一些帮助以正确重构它。我将如何传递我希望从调用中返回的类型列表?

masterData.PatternData = await GetMeetingData();
masterData.PatternDataDays = await GetMeetingDays();



    private async Task<List<MeetingPatternData>> GetMeetingData()
    {
        var retVal = new List<MeetingPatternData>();
        try
        {
            var client = ClientFactory.CreateClient("ServerAPI");
            retVal = await client.GetFromJsonAsync<List<MeetingPatternData>>("MeetingTimeManager/GetPatterns");
        }
        catch (AccessTokenNotAvailableException exception)
        {
            exception.Redirect();
        }
        return retVal;
    }

    private async Task<List<MeetingPatternDays>> GetMeetingDays()
    {
        var retVal = new List<MeetingPatternDays>();
        try
        {
            var client = ClientFactory.CreateClient("ServerAPI");
            retVal = await client.GetFromJsonAsync<List<MeetingPatternDays>>("MeetingTimeManager/GetDays");
        }
        catch (AccessTokenNotAvailableException exception)
        {
            exception.Redirect();
        }
        return retVal;
    }

【问题讨论】:

    标签: c# api refactoring blazor


    【解决方案1】:

    可变部分是返回类型和 URI,所以如果你这样声明你的方法:

    private async Task<List<T>> Get<T>(string requestUri)
    {
        try
        {
            var client = ClientFactory.CreateClient("ServerAPI");
            return await client.GetFromJsonAsync<List<T>>(requestUri);
        }
        catch (AccessTokenNotAvailableException exception)
        {
            exception.Redirect();
        }
        return new List<T>();
    }
    

    然后你可以这样调用:

    masterData.PatternData = await Get<MeetingPatternData>("MeetingTimeManager/GetPatterns");
    masterData.PatternDataDays = await Get<MeetingPatternDays>("MeetingTimeManager/GetDays");
    

    我已经删除了这部分:

    var retVal = new List<MeetingPatternData>();
    

    因为您不必要地分配了List

    您可能还应该返回 IEnumerable&lt;T&gt; 而不是 List&lt;T&gt;,基于使用完成工作所需的最严格类型的理念,除非调用者需要操作返回的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-30
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多