Класс для эффективной генерации ключей - PullRequest
1 голос
/ 21 января 2011

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

В старые времена C я мог просто создать копию ячейки памяти массива и вернуть ее в виде строки, которая затем служила бы моим ключом. Я не знаю, смогу ли я все еще сделать это в C #, но я ищу способы (почти) такие же эффективные, как этот. Есть предложения?

Спасибо, Кемаль

UPDATE: Я имел в виду, что результат должен быть уникальным в зависимости от элементов входного массива. Таким образом, предложение GUID здесь не применимо. Одним из очевидных решений является объединение текстовых версий элементов массива в строку, как было предложено Джоном Бенедикто. То, что я искал, было очень эффективным для выполнения. Я сам пришел к следующему коду после просмотра раздела небезопасного кода в справочнике по языку C #:

    public static string BuildKey( int[ ] src ) {
        string res;
        unsafe {
            fixed( int* fxsrc = src ) {
                res = new string( ( char* )fxsrc, 0, src.Length*2 );
            }
        }
        return res;
    }       

Есть ли проблемы с этим кодом?

Ответы [ 2 ]

3 голосов
/ 21 января 2011
var pk = Guid.NewGuid();

// Or if you need it as a string
var pkAsString = pk.ToString();

Насколько уникальнее вам это нужно?

1 голос
/ 21 января 2011

Если у вас есть целочисленный массив в C #, который вы хотите преобразовать, вы можете использовать статический универсальный метод ConvertAll в классе Array для преобразования целых чисел в строковое представление:

int[] data = { 0, 1, 2, 3, 4, 5, 6 };

string value = String.Join(",", Array.ConvertAll<int, string>(data, x => x.ToString()));
...