亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

生成第一個/下一個/上一個/最后一個鏈接,其中 api 僅提供偏移量

生成第一個/下一個/上一個/最后一個鏈接,其中 api 僅提供偏移量

C#
慕森卡 2022-10-15 14:33:03
我正在嘗試編寫一些帶有offset值的代碼,然后生成第一個/下一個/上一個/最后一個鏈接。我目前有類似下面的內容,但一直在考慮邊緣情況,我的計算結果出現了偏差。我想有人一定已經在某個地方做過這個,但找不到可以查看/使用的庫。public class PagedItems<T>{    public PagedItems()    {    }    public PagedItems(int offset, int totalSize, IEnumerable<T> subset)    {        this.Offset = offset;        this.TotalSize = totalSize;        this.Data = subset;        this.Links = new Dictionary<string, Uri>();        var pageCount = (totalSize - offset) / 20;        if (offset > 20)        {            this.Links.Add("prev", new Uri($"/accounts?skip={offset - 20}"));        }        if (offset < (totalSize - offset))        {            this.Links.Add("last", new Uri($"/accounts/skip={totalSize - 20}"));        }    }    public int Offset { get; }    public int Size => this.Data.Count();    public int TotalSize { get; }    public IEnumerable<T> Data { get; }    public Dictionary<string, Uri> Links { get; }}
查看完整描述

1 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

對于任何想要這個的人,我可以使用此代碼和圍繞邏輯進行單元測試:


public class PagedItems<T>

{

    private readonly int pageSize;


    public PagedItems()

    {

    }


    public PagedItems(int offset, int pageSize, int totalSize, IEnumerable<T> subset, Uri baseUri)

    {

        this.Offset = offset;

        this.pageSize = pageSize;

        this.TotalSize = totalSize;

        this.Data = subset;

        this.Links = new Dictionary<string, string>();


        if (ShouldDisplayPrevAndFirstLink(offset))

        {

            var linkValue = Math.Max(offset - pageSize, 0);


            var link = QueryHelpers.AddQueryString(baseUri.OriginalString, "skip", linkValue.ToString());


            this.Links.Add("prev", link);

        }


        if (ShouldDisplayNextAndLastLink(offset, totalSize, pageSize))

        {

            var linkValue = offset + pageSize;


            var link = QueryHelpers.AddQueryString(baseUri.OriginalString, "skip", linkValue.ToString());


            this.Links.Add("next", link);

        }


        if (ShouldDisplayPrevAndFirstLink(offset))

        {

            var link = QueryHelpers.AddQueryString(baseUri.OriginalString, "skip", "0");


            this.Links.Add("first", link);

        }


        if (ShouldDisplayNextAndLastLink(offset, totalSize, pageSize))

        {

            var linkValue = totalSize - pageSize;


            var link = QueryHelpers.AddQueryString(baseUri.OriginalString, "skip", linkValue.ToString());


            this.Links.Add("last", link);

        }

    }


    private static bool ShouldDisplayNextAndLastLink(int offset, int totalSize, int pageSize) => offset < totalSize - pageSize;


    private static bool ShouldDisplayPrevAndFirstLink(int offset) => offset > 0;


    public int Offset { get; }


    public int Size => this.Data.Count();


    public int TotalSize { get; }


    public IEnumerable<T> Data { get; }


    public Dictionary<string, string> Links { get; }

}


查看完整回答
反對 回復 2022-10-15
  • 1 回答
  • 0 關注
  • 101 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號