Example #1
0
        public static TRank SetRank <TRank>(this IRanking <TRank> ranking,
                                            Func <TRank, TRank> newRankFactory)
            where TRank : struct
        {
            ranking.NotNull(nameof(ranking));
            newRankFactory.NotNull(nameof(newRankFactory));

            return(ranking.Rank = newRankFactory.Invoke(ranking.Rank));
        }
Example #2
0
        /// <summary>
        /// 异步设置排名。
        /// </summary>
        /// <typeparam name="TRank">指定的排序类型(兼容整数、单双精度的排序字段)。</typeparam>
        /// <param name="ranking">给定的 <see cref="IRanking{TRank}"/>。</param>
        /// <param name="newRankFactory">给定的新 <typeparamref name="TRank"/> 工厂方法。</param>
        /// <param name="cancellationToken">给定的 <see cref="CancellationToken"/>(可选)。</param>
        /// <returns>返回一个包含 <typeparamref name="TRank"/>(兼容整数、单双精度的排序字段)的异步操作。</returns>
        public static ValueTask <TRank> SetRankAsync <TRank>(this IRanking <TRank> ranking,
                                                             Func <TRank, TRank> newRankFactory, CancellationToken cancellationToken = default)
            where TRank : struct
        {
            ranking.NotNull(nameof(ranking));
            newRankFactory.NotNull(nameof(newRankFactory));

            return(cancellationToken.RunOrCancelValueAsync(()
                                                           => ranking.Rank = newRankFactory.Invoke(ranking.Rank)));
        }