#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