Подтвердить что ты не робот

Преобразование Int в Guid

Мне нужно преобразовать Convert Int32 в Guids, и это то, что я придумал.

public static class IntExtensions
{
    public static Guid ToGuid(this Int32 value)
    {
        if (value >= 0) // if value is positive
            return new Guid(string.Format("00000000-0000-0000-0000-00{0:0000000000}", value));
        else if (value > Int32.MinValue) // if value is negative
            return new Guid(string.Format("00000000-0000-0000-0000-01{0:0000000000}", Math.Abs(value)));
        else //if (value == Int32.MinValue)
            return new Guid("00000000-0000-0000-0000-012147483648");  // Because Abs(-12147483648) generates a Qaru due to being > 12147483647 (Int32.Max)
    }
}

Но это как-то уродливо. Кто-нибудь лучше знает?

Update:

Да, я знаю, что все это уродливо, но я теряю идеи. Проблема в. Я получаю данные и должен хранить их в таблице, которую я не могу изменить. Первичный ключ отправки данных - это Int и первичный ключ таблицы, который я должен хранить, это Guid. Проблема в том, что я должен понять, о каком объекте говорит отправитель, но может хранить его только как Guid.

Обновление 2:

Хорошо, я вижу, что мне нужно предоставить дополнительную информацию здесь. Я являюсь веб-сервисом, получающим данные, и должен передавать данные в интерфейс, который я также не могу контролировать. Поэтому я не могу моделировать полученные данные и базу данных (Interface), где я должен отправлять данные. Кроме того, мне нужно каким-то образом сопоставить эти две вещи таким образом, чтобы я как-то мог обновить элемент. Вздох

4b9b3361

Ответ 1

Вот простой способ сделать это:

public static Guid ToGuid(int value)
{
    byte[] bytes = new byte[16];
    BitConverter.GetBytes(value).CopyTo(bytes, 0);
    return new Guid(bytes);
}

Вы можете изменить, где будет происходить копия (изменить индекс от 0 до 12). Это действительно зависит от того, как вы хотите определить это необычное преобразование "int to Guid".

Ответ 2

Имели те же проблемы, нуждались в Int to Guid, затем обратно в Int. Старые данные, которые использовали идентификатор int, но для функции обработки, требовали Guid. Было гораздо меньше кода для написания дополнительных функций и изменений БД. Просто проще передать Int iD в форме Guid, зная, что он не собирается использовать это в качестве своей последней экономии Guid. Сохранение - это Вставка, поэтому в конце появилась новая подсказка.

Вот код сверху и идея из другого сообщения о Guids to ints и вывод Int обратно.

public static Guid Int2Guid(int value)
{
    byte[] bytes = new byte[16];
    BitConverter.GetBytes(value).CopyTo(bytes, 0);
    return new Guid(bytes);
}

public static int Guid2Int(Guid value)
{
    byte[] b = value.ToByteArray();
    int bint = BitConverter.ToInt32(b, 0);
    return bint;
}

Этот Guid2Int должен быть передан только Guid, который пришел из Int.

Ответ 3

Вы можете взять цифры из int и отформатировать их так, чтобы они выглядели как GUID, но это не делает результат GUID. GUID - это, по сути, 16-байтовый номер, который вычисляется с использованием алгоритма, который гарантирует, что число уникально. Вы можете генерировать GUID в течение всего дня на каждом компьютере в мире и не получать дубликат (по крайней мере, эту теорию). Переформатированный int не является уникальным, и это определенно не GUID.