2010-11-15 1 views
0

Мне нужно сгенерировать «хэш» для любого уникального вызова метода в моем проекте. Например, у меня есть метод string GetSomeString(int someInt). Таким образом, мне нужны разные хэши в этих случаях:Как получить уникальный ключ для любого вызова метода?

string GetSomeString(1) -- key 1 
string GetSomeString(2) -- key 2 
string GetSomeString(3) -- key 3 

Как создать такой хэш?

UPD: Я хочу зарегистрировать любое выполнение метода с помощью некоторого уникального хеша для каждого вызова метода. Что-то вроде этого:

public delegate T HelperFactoryMethod<T>(); 

public static LogMethodExecution<T>(HelperFactoryMethod<T> factoryMethod) where T: class 
{ 
    string key = GetHashString(factoryMethod); 
    StoreToDatabase(key); 
    ... 
} 

Результат Пример GetHashString() должен быть как:

  1. Список GetSomeObjects (1, ObjectType.Simple) должны быть 'ListGetSomeObjects_1_ObjectType.Simple' или что-то вроде это.
  2. Список GetSomeObjects (2, ObjectType.None) должен быть 'ListGetSomeObjects_2_ObjectType.None' или что-то в этом роде.
+0

что, если вы вызываете снова GetSomeString (1)? Нужно ли снова возвращать 1 или другое значение? – Simone

+4

Не могли бы вы рассказать нам больше о конечной цели здесь? Я не уверен, что вы ищете представление функции класса (делегата) первого класса, memoize функции или что-то еще. – Ani

+0

Вам понадобится немного конкретнее о том, что именно вы хотите, чтобы этот ключ был. В качестве тривиального примера вы можете просто вернуть текстовую строку «1», «2», «3», но я подозреваю, что это не то, что вы хотите! –

ответ

2

Вы можете использовать хеш-функцию, которая генерирует уникальный ключ для всех значений параметров. , например:

public string GetSomeString(int someInt) 
{ 
    MD5CryptoServiceProvider cryptoServiceProvider = new MD5CryptoServiceProvider(); 
    byte[] data = Encoding.ASCII.GetBytes(String.Format("{0}{1}", "methodName", someInt)); 
    data = cryptoServiceProvider.ComputeHash(data); 
    return Convert.ToString(data); 
} 

каждый уникальный «имяМетода» и параметр будет возвращать уникальный ключ

1

Возможно, я не правильно понял ваш вопрос, но почему бы вам не использовать тот же самый someInt, что и хэш?

Смежные вопросы