生成一系列数字

时间:2013-11-13 09:10:07

标签: c# asp.net-mvc-2 sequence

我想在asp.net mvc2中创建序列号..

然后号码应从{ 0 to 1000}开始。我试过跟随,

 var seq = Enumerable.Range(1, 1000);
        ViewData["OrderNo"] = seq;

在视图中:

 <%:Html.Hidden("OrderNo") %>
            <%:ViewData["OrderNo"] %>  

我的结果是

System.Linq.Enumerable+<RangeIterator>d__b8

但是当在视图中获取值时它无法正常工作......如何生成序列号?

2 个答案:

答案 0 :(得分:23)

如果您要枚举从IEnumerable<int>到变量0的数字序列(end),请尝试

Enumerable.Range(0, ++end);

在解释中,要获得从0到1000的数字序列,您希望序列从0开始(记住在0到1000之间有1001个数字,包括在内)。


如果你想要一个无限的线性系列,你可以写一个像

这样的函数
IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
    while (true)
    {
        yield return k;
        k = (c * k) + n;
    }
}

你可以使用

var ZeroTo1000 = Series().Take(1001);

如果你想要一个功能,你可以反复调用以生成递增的数字,也许你想要的东西就像。

using System.Threading;

private static int orderNumber = 0;

int Seq()
{
    return Interlocked.Increment(ref orderNumber);
}

当您致电Seq()时,它将返回下一个订单号并递增计数器。

答案 1 :(得分:3)

目前尚不清楚您的意思或您认为失败的原因,但Enumerable.Range的参数为startcount,而不是startend

如果要生成从0开始并以1000结尾的数字,则必须写:

Enumerable.Range(0,1001);

如果您有其他问题(例如,序列不会在用户呼叫之间,或者从用户到用户之间或其他任何阶段持续存在),则必须具体。

也许你的意思是你在ViewData中存储的IEnumerable没有像你在View中预期的那样持久化?这是因为Range返回一个实现IEnumerable的对象,并使用延迟执行来生成请求的值。除非使用for或ToArray()强制枚举,否则根本不会生成数字。将对象存储在某处不会强制枚举。