2013-11-13 11 views
2

Я хочу создать порядковые номера в 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 

Но при получении значение с точки зрения он не работает ... Как для генерации последовательных чисел?

+0

Да. это хороший вопрос, и спросил меня. всякий раз, когда пользователь нажимает кнопку, он будет генерировать порядок в виде порядковых номеров .. нет предела .. Я ставлю 1000, например .. – PoliDev

+1

Что «не работает»? Enumerable.Range определенно работает. Что вы ожидали от случившегося и что на самом деле произошло? И если вы не хотите начинать с 1, почему вы положили 1 в качестве стартового номера? –

+0

это не проблема. Я хочу начать только с 1. но мой результат выглядит пустым. – PoliDev

ответ

18

Если вы хотите перечислить последовательность чисел (IEnumerable<int>) от 0 переменной end, то попробуйте

Enumerable.Range(0, ++end); 

В объяснении, чтобы получить последовательность чисел от 0 до 1000, вы хотите, последовательность начинать с 0 (помня, что существует 1001 номеров от 0 до 1000 включительно).


Если вы хотите неограниченное линейный ряд, вы могли бы написать функцию, как

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() он возвращает следующий порядковый номер и увеличить счетчик.

+0

если неограниченное означает, как это сделать? Я хочу начать с 1, но я не знаю конечного значения. – PoliDev

+0

спасибо u so much. что это блокируется. он не поддерживает в vs 2010 mvc2? – PoliDev

+0

@AngDei, он должен работать нормально. Вам нужно будет ссылаться на «System.Threading» http://msdn.microsoft.com/en-us/library/dd78zt0c(v=vs.100).aspx – Jodrell

2

Неясно, что вы имеете в виду или что вы считаете неудачу, но параметры Enumerable.Range являются start и count, не start и end.

Если вы хотите, чтобы генерировать номера, которые начинаются с 0 и заканчивается в 1000, вам придется написать:

Enumerable.Range(0,1001); 

Если у вас есть другая проблема (например, последовательность не сохраняется между вызовами пользователя или от пользователя к пользователю или что-то еще), вам придется быть конкретным.

Возможно, вы имеете в виду, что IEnumerable, который вы храните в ViewData, не сохраняется, как вы ожидали в представлении? Это потому, что Range возвращает объект, который реализует IEnumerable и использует отложенное выполнение для получения запрошенных значений. Если вы не перечислите нумерацию с помощью for или ToArray(), цифры не будут сгенерированы вообще. Хранение объекта где-то не приводит к перечислению.