Member 13999803 Ответов: 2

Как автоматически генерировать id в VB.NET


Я хочу, чтобы мой идентификатор был как SR18/1, а затем SR18/2....подобный этому.каким будет мой код для инкремента..

Что я уже пробовал:

Я не могу быть в состоянии генерировать SR18/2

2 Ответов

Рейтинг:
2

OriginalGriff

Это зависит от того, что именно вы хотите сделать, и как вы храните информацию. И очень важно тщательно подумать об этом: ошибитесь, и это может вызвать некоторые ужасные последствия.

Например, ваша первая проблема проста: как вы используете это - это однопользовательское приложение или многопользовательское? Это имеет огромное значение: многопользовательские уникальные идентификаторы нуждаются в гораздо большей заботе, чем однопользовательские!
Система хранения данных также влияет на то, как вы ее генерируете: если вы используете базу данных, то, вероятно, можете позволить ей выполнять большую часть "тяжелой работы" за вас, поскольку у них обычно есть системы для создания уникальных значений, которые вы затем можете использовать в качестве основы для вашего конкретного формата идентификатора.

Другие проблемы, о которых вам нужно подумать: откуда берется бит "SR18"? Когда это изменится? Как это меняется? Является ли "18" последними двумя цифрами года? Если да, то когда это изменится? 1 января или в конце финансового года (1 апреля в Великобритании для целей налогообложения, но может быть любой датой, если это финансовый год компании, в зависимости от того, когда компания начала торговать)? Когда меняется бит "SR" и почему? А что делать?

Это не так просто, как "эта строка кода", или даже "этот метод" или "этот алгоритм" - нечисловые автоматические значения идентификаторов должны быть тщательно проработаны задолго до того, как вы начнете с кодом!


Рейтинг:
0

MarcusCole6833

Я хочу, чтобы мой идентификатор был как SR18/1, а затем SR18/2....подобный этому.каким будет мой код для инкремента..

Что я уже пробовал:

Я не могу быть в состоянии генерировать SR18/2

Я согласен с вышесказанным: создание чего-то буквенно-цифрового ставит много вопросов. Приведенный ниже код является базовым решением этой проблемы

В качестве простого объяснения кода Вы используете это

Sub Main()
        Dim parentString As String = "SR18/"
        Dim previousInt As Int16 = 35
        Dim currentPart As String = ""

        currentPart = fnMakeNext(parentString, previousInt)

        previousInt = previousInt + 1

        Dim loadsofParts As New List(Of String)

        Dim endofLot As Int16 = 72

        loadsofParts = fnMakeManyParts(previousInt, endofLot, parentString)

        Console.WriteLine("Single Part")
        Console.WriteLine(currentPart)
        Console.WriteLine(vbCrLf)
        Console.WriteLine("Multi Parts")
        For Each s As String In loadsofParts
            Console.WriteLine(s)
        Next
        Console.ReadLine()


    Private Function fnMakeManyParts(previousInt As Short, endofLot As Short, parentString As String) As List(Of String)
        Dim result As New List(Of String)
        For p As Int16 = previousInt To endofLot Step 1
            result.Add(fnMakeNext(parentString, p))
        Next
        Return result
    End Function

    Private Function fnMakeNext(parentString As String, previousInt As Short) As String
        Dim returned As String
        returned = parentString + previousInt.ToString
        Return returned
    End Function


    End Sub



Код адресует только то, что вы хотите сделать инкрементным буквенно-цифровым текстом. Он ничего не говорит о необходимости того, почему вы кодируете это.