如何重构返回 List<T> 的 C# 代码?

Rob*_*Rob 1 c# api refactoring blazor

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

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;
    }
Run Code Online (Sandbox Code Playgroud)

Joh*_*lay 7

变量部分是返回类型和 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>();
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样调用:

masterData.PatternData = await Get<MeetingPatternData>("MeetingTimeManager/GetPatterns");
masterData.PatternDataDays = await Get<MeetingPatternDays>("MeetingTimeManager/GetDays");
Run Code Online (Sandbox Code Playgroud)

我已经删除了这部分:

var retVal = new List<MeetingPatternData>();
Run Code Online (Sandbox Code Playgroud)

因为你List不必要地分配了一个。

您可能还应该返回一个IEnumerable<T>而不是List<T>基于使用最严格的类型来完成这项工作的哲学,除非调用者需要操作返回的数据。