可枚举范围无法正常工作

时间:2012-05-07 12:56:52

标签: c#

我有一个可枚举的范围,我最初想要对范围做的是循环存储列表并获得minStop(最小停止点)和maxStart(max tarting pint)但我只是在确定最小范围和在我的可数范围内的最大范围,并没有给我我需要的值。请帮我弄清楚我做错了什么。请!

List<Grades> ranges = new List <Grades>();
var strGrades = "40-50, 55-62, 65-72, 80-82, 85-92, 95-99, 110-115";
var splitGrades = strGrades.Split(char.Parse(","));
foreach(var item in splitGrades)
{
    var splitAgain = items.Split(char.Parse("-"));
    var myMax = Math.Max(int.Parse(splitAgain[0]), int.Parse(splitAgain[1]));
    var myMin = Math.Max(int.Parse(splitAgain[0]), int.Parse(splitAgain[1]));

    //my enumerable list   
    var erange = Enumerable.Range(int.Parse(myMax), int.Parse(myMax)).ToList()
    foreach (var maxrange in erange)
    {
       for (int q = myMin; q < maxrange; q++)
        {
         //custom extension method for Between
         if (!q.Between((myMin), (myMax), true))
         {
          //Public class Grades{public int Start, get; set }                  
            ranges.Add(new Grades()
            {
              Start= q,
            });
         }
       }
     }        
  }
 return ranges;
}

任何人都可以告诉我如何获得我的可数范围以获得我的minStop值(例如:第一组成绩:40-50,我的最终停止值为50,然后得到我的下一组成绩范围55- 62,我的最大起始值是55,所以我希望得到50-55的范围,我需要每组中的最后一个值和之后的集合的起始值。我希望我很清楚。任何帮助非常感谢!谢谢

2 个答案:

答案 0 :(得分:8)

如果您查看Enumerable.Range的文档,您会看到第二个参数是计数,而不是最大值。

public static IEnumerable<int> Range(int start, int count)

所以你需要传递max - min + 1作为第二个参数,假设你的最大值是包容性的。

您还需要将最小值作为第一个参数传递,而不是最大值。

还有一个错误是你将myMin计算为最大限度而不是限制的最小值。

答案 1 :(得分:1)

首先找到Min它应该是

var myMin = Math.Min(int.Parse(splitAgain[0]), int.Parse(splitAgain[1]));

Enumerable.Range(int.Parse(myMax),int.Parse(myMax))

这将从n开始生成一个可枚举的n长度。

应该是

Enumerable.Range(int.Parse(myMax), int.Parse(myMax) - int.Parse(myMin) + 1)

您的代码应为

List<Grades> ranges = new List <Grades>();
var strGrades = "40-50, 55-62, 65-72, 80-82, 85-92, 95-99, 110-115";
var splitGrades = strGrades.Split(char.Parse(","));
foreach(var item in splitGrades)
{
    var splitAgain = items.Split(char.Parse("-"));
    int myMax = Math.Max(int.Parse(splitAgain[0]), int.Parse(splitAgain[1]));
    int myMin = Math.Min(int.Parse(splitAgain[0]), int.Parse(splitAgain[1]));

    //my enumerable list   
    var erange = Enumerable.Range(myMax, myMax - myMin + 1).ToList()
    foreach (var maxrange in erange)
    {
       for (int q = myMin; q < maxrange; q++)
        {
         //custom extension method for Between
         if (!q.Between((myMin), (myMax), true))
         {
          //Public class Grades{public int Start, get; set }                  
            ranges.Add(new Grades()
            {
              Start= q,
            });
         }
       }
     }        
  }
 return ranges;
}