C# 将包含整数的字符串解析为列表<;int>;

C# 将包含整数的字符串解析为列表<;int>;,c#,parsing,.net-2.0,C#,Parsing,.net 2.0,我想让用户通过以下方式输入整数: 以逗号分隔的数字:1,31264000,27等 数字范围:37-2000 上述各项的混合物:55,2,1-100006500-650072182 我怎样才能解析一个字符串,它可能是以int列表结尾的字符串上面的任何形式 例如:1-5,6,7-8应该给出一个包含整数1,2,3,4,5,6,7,8的列表 我对C#还很陌生,所以如果能提供一些示例代码,我将不胜感激。谢谢。字符串。如果一个组包含-split,则通过逗号拆分将为您提供所需的一切,然后再次拆分,并且您有

我想让用户通过以下方式输入整数:

  • 以逗号分隔的数字:1,31264000,27等

  • 数字范围:37-2000

  • 上述各项的混合物:55,2,1-100006500-650072182

我怎样才能解析一个字符串,它可能是以int列表结尾的字符串上面的任何形式

例如:1-5,6,7-8应该给出一个包含整数1,2,3,4,5,6,7,8的列表


我对C#还很陌生,所以如果能提供一些示例代码,我将不胜感激。谢谢。

字符串。如果一个组包含-split,则通过逗号拆分将为您提供所需的一切,然后再次拆分,并且您有两个范围值

根据“,”标记字符串,然后解析单个数字或范围的列表

从内存中,列表上有一个Split(..)方法,您可以使用它来获取令牌。然后只需测试是否存在“-”(如果是第一个字符,则为负数,显然不是一个范围)。

这是有效的:

var query =
    from x in text.Split(',')
    let y = x.Split('-')
    let b = int.Parse(y[0].Trim())
    let e = int.Parse(y[y.Length - 1].Trim())
    from n in Enumerable.Range(b, e - b + 1)
    select n;

var result = query.ToList();
我建议添加一些错误处理,但如果您的输入格式正确,这就行了


**编辑**:NET 2.0版本

var result = new List<int>();
foreach (var x in text.Split(','))
{
    var y = x.Split('-');
    var b = int.Parse(y[0].Trim());
    var e = int.Parse(y[y.Length - 1].Trim());
    for (var n = b; n <= e; n++)
    {
        result.Add(n);
    }
}
var result=newlist();
foreach(text.Split(',')中的变量x)
{
变量y=x.Split('-');
var b=int.Parse(y[0].Trim());
var e=int.Parse(y[y.Length-1].Trim());

对于(var n=b;n)在“1-10000”范围内的列表中,您希望得到什么结果?它应该在列表中添加10000个数字吗?@Guffa:是的,1-10000会将1到10K之间的所有数字添加到列表中。例如,1-5会将整数1,2,3,4,5添加到列表中。谢谢。问题是我们必须用.NET 2.0来做这件事。@stanleyR-我在我的答案中添加了.NET 2.0版本。谢谢!x可能没有“-”,它可能只是一个整数值。例如,文本可能是1-2,5222,5-9。这个可以处理吗?再次感谢!@stanleyR-是的,它可以。如果您有一个字符串“24”,您可以使用“-”然后返回一个包含一个字符串的数组。这就是我分析数组中第一个和最后一个值的原因。它可以很好地处理单值和双值数组。工作正常。接受答案。谢谢。