Как сгенерировать новый номер при создании новой записи?

#c#

#c#

Вопрос:

У меня есть задача. Задача, в которой мне нужно сгенерировать номер при загрузке нового списка загрузки. Я выполнил формуляр, в котором есть поле с именем «LoadingListNumber». Что мне нужно, так это сгенерировать это число в формате: 04/0001/19 (Month / LoadingListNumber / Year). Номер 0001 загружается при его новой записи. Итак, если у вас есть новая запись, это будет 0001, другая запись 0002,0010 и т.д. Я знаю, как сгенерировать месяц и год, но не это число :/

Я уже сгенерировал месяц в этом предложении и год.

 NumberOfLoadingList = string.Format(DateTime.Now.ToString("MM")   "/"   DateTime.Now.Year.ToString("YY"));
 

Мне действительно нужен совет или совет, как сгенерировать номер. Спасибо.

Комментарии:

1. Создайте rand переменную от 1 до чего угодно и добавьте ее в строку или как вы хотите ее построить

2. Я не знаю, чего вы пытаетесь достичь здесь

3. вам нужно 1. выбрать максимальное число из существующих записей с заданным годом и месяцем 2. увеличить его 3. использовать… эти операции должны быть атомарными (транзакция lock / db)

4. С помощью вашего кода (вызывающего DateTime. Теперь дважды) У вас очень маленький шанс получить месяц в одном году и год в другом.

5. сбрасывается ли последовательность когда-либо? повторяется ли он, когда достигает 9999? как вы планируете хранить / извлекать последнюю последовательность?

Ответ №1:

Используйте padding и простой loop , где вы генерируете записи:

 for(int i = 1; i < 100; i  )
{
    Console.WriteLine(i.ToString().PadLeft(4, '0'));
}
 

Вывод

 0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
[...]
0099
 

Комментарии:

1. Я думаю, он ищет, как сгенерировать число, а не форматировать его

2. Да, может быть, на самом деле это довольно неясно. Я оставлю это здесь на случай, если это может ему помочь, и буду ждать дополнительной информации.

3. Другой способ: for (int i = 1; i < 100; i ) Console.WriteLine($"{i:0000}"); (или i.ToString("0000") )

4. Спасибо, это в значительной степени мне нужно :]

Ответ №2:

Я бы сделал это немного иначе, чем предложил АЛЬФА..

Это полный пример консольного приложения, но я уверен, что вы можете видеть, что я пытаюсь здесь сделать.

 using System;
using System.Collections.Generic;

public class Program
{
    // This is a list of all your previous numbers
    // this could come from database or calculated somewhere in your application
    private static List<int> numbersList = new List<int>(); 

    public static void Main()
    {
        string NumberOfLoadingList; 

        for(var i=0; i<10; i  )
        {
            NumberOfLoadingList = string.Format("{0}/{1:0000}/{2}", DateTime.Now.ToString("MM"), GenerateNewNumber(), DateTime.Now.ToString("yy"));
            Console.WriteLine(NumberOfLoadingList);
        }
    }

    private static int GenerateNewNumber()
    {
        int number = 0;

        while(true) 
        {
            // Make sure the number is unique
            if (!numbersList.Contains(  number)) 
            {
                numbersList.Add(number);
                return number;
            }

        }
    }
}
 

Вы можете попробовать это здесь: https://dotnetfiddle.net/mtT1MS

Вывод этого приложения:

 04/0001/19
04/0002/19
04/0003/19
04/0004/19
04/0005/19
04/0006/19
04/0007/19
04/0008/19
04/0009/19
04/0010/19