ListUtil.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System.Collections.Generic;
  2. namespace GFGGame
  3. {
  4. public class ListUtil
  5. {
  6. /// <summary>
  7. /// 用来做泛型数据切换,上一条,下一条...
  8. /// </summary>
  9. /// <param name="list"></param>
  10. /// <param name="type"></param>
  11. /// <param name="currentIndex">当前处于的索引</param>
  12. /// <param name="newIndex">操作数据之后返回的数据的索引,也就是最新的索引</param>
  13. /// <typeparam name="T"></typeparam>
  14. /// <returns></returns>
  15. public static T Navigate<T>(List<T> list, NavigateType type, int currentIndex, out int newIndex) where T : new()
  16. {
  17. if (type == NavigateType.Previous)
  18. {
  19. //如果已经是最前面的一条数据,则切换到最后一条数据,形成一个切换循环
  20. if (currentIndex <= 0)
  21. {
  22. currentIndex = list.Count - 1;
  23. newIndex = currentIndex;
  24. return list[currentIndex];
  25. }
  26. }
  27. else if (type == NavigateType.Next)
  28. {
  29. //如果已经是最后一条数据,则切换到第一条数据,形成一个切换循环
  30. if (currentIndex >= list.Count - 1)
  31. {
  32. currentIndex = 0;
  33. newIndex = currentIndex;
  34. return list[currentIndex];
  35. }
  36. }
  37. else
  38. {
  39. newIndex = currentIndex;
  40. return list[currentIndex];
  41. }
  42. int previousIndex = currentIndex - 1;
  43. int nextIndex = currentIndex + 1;
  44. if (previousIndex < 0 && nextIndex >= list.Count)
  45. {
  46. newIndex = currentIndex;
  47. return list[currentIndex];
  48. }
  49. if (type == NavigateType.Previous && previousIndex >= 0)
  50. {
  51. newIndex = previousIndex;
  52. return list[previousIndex];
  53. }
  54. if (type == NavigateType.Next && nextIndex < list.Count)
  55. {
  56. newIndex = nextIndex;
  57. return list[nextIndex];
  58. }
  59. newIndex = currentIndex;
  60. return list[currentIndex];
  61. }
  62. /// <summary>
  63. /// 动作枚举
  64. /// </summary>
  65. public enum NavigateType
  66. {
  67. /// <summary>
  68. /// 不作切换动作,返回当前索引的数据
  69. /// </summary>
  70. None = 0,
  71. /// <summary>
  72. /// 上一条
  73. /// </summary>
  74. Previous = 1,
  75. /// <summary>
  76. /// 下一条
  77. /// </summary>
  78. Next = 2
  79. }
  80. }
  81. }