/// <summary>
        /// 扩展Distinct方法(对象需标记为可序列化)
        /// </summary>
        /// <param name="reserveMode">保留模式</param>
        public static List <T> Distinct <T, TResult>(this IList <T> list, Func <T, TResult> keySelector, ReserveMode reserveMode) where T : class
        {
            PubEqualComparer <T, TResult> eq = new PubEqualComparer <T, TResult>(keySelector);
            var result = new List <T>();

            if (reserveMode == ReserveMode.First)
            {
                list.Reverse();
            }

            for (int i = 0, len = list.Count; i < len; i++)
            {
                bool isFind = false;

                for (int j = i + 1; j < len; j++)
                {
                    if (eq.Equals(list[i], list[j]))
                    {
                        isFind = true;
                        break;
                    }
                }

                // 保留最后1个不重复项
                if (!isFind)
                {
                    result.Add(list[i].DeepClone <T>());
                }
            }

            if (reserveMode == ReserveMode.First)
            {
                result.Reverse();
            }

            return(result);
        }
Exemple #2
0
 public static String ConvertResModeText(ReserveMode? mode)
 {
     switch (mode)
     {
         case ReserveMode.KeywordAuto: return "キーワード予約";
         case ReserveMode.ManualAuto : return "プログラム自動予約";
         case ReserveMode.EPG        : return "個別予約(EPG)";
         case ReserveMode.Program    : return "個別予約(プログラム)";
         default                     : return "";
     }
 }