C# 泛型約束為枚舉


示例:根據權重對象列表隨機返回一個枚舉類型

using System.Collections;
using UnityEngine;

public static class WeightObjectsUtil {

    /// <summary>
    /// 隨機在權重列表返回一個枚舉類型
    /// </summary>
    /// <typeparam name="T"> 枚舉類型 </typeparam>
    /// <param name="weightObjects"> 權重對象列表 </param>
    /// <param name="defaultType"> 默認返回的枚舉類型 </param>
    /// <returns></returns>
    public static T GetLandTypeWithWeightList<T> ((T type, int weight)[] weightObjects, T defaultType) where T : System.Enum {
        // 總權重
        int sumWeight = 0;
        for (int i = 0, len = weightObjects.Length; i < len; i++) {
            sumWeight += weightObjects[i].weight;
        }

        // 隨機數 [0, sumWeight)
        int n = Random.Range(0, sumWeight);
        // 根據隨機數所在總權重線段上的落點計算出結果
        int m = 0;
        for (int i = 0, len = weightObjects.Length; i < len; i++) {
            (T landType, int weight) weightObj = weightObjects[i];
            if (n >= m && n < m + weightObj.weight) {
                return weightObj.landType;
            }

            m += weightObj.weight;
        }
        return defaultType;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM