Преобразование 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), где я должен отправлять данные. Кроме того, мне нужно каким-то образом сопоставить эти две вещи таким образом, чтобы я как-то мог обновить элемент. Вздох
Ответы
Ответ 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.