Могут ли две строки .net иметь разные хеши? У меня есть Hashtable, среди прочего, ключевой «путь». Когда я просматриваю элементы в таблице, чтобы распечатать ее, я вижу, что ключ существует.
Однако при попытке найти соответствующий элемент нет. Отладка предполагает, что строка, которую я ищу, имеет хэш, отличный от того, который я использую в качестве ключа.
Этот код находится в проекте Castle Monorail, использующем Brail в качестве механизма просмотра. Ключ, который я ищу, вставлен строкой Брайля, подобной этой:
UrlHelper.Link(node.CurrentPage.LinkText, {@params: {@path: "/Page1"}})
Затем в этом методе (в настраиваемом IRoutingRule):
public string CreateUrl(System.Collections.IDictionary parameters)
{
PrintDictionaryToLog(parameters);
string url;
if (parameters.Contains("path")) {
url = (string)parameters["path"];
}
else {
return null;
}
}
Ключ печатается в журнале, но функция возвращает ноль. Я не знал, что это может быть проблема даже со строками .net, но я предполагаю, что это какая-то проблема с кодировкой?
Ой, и это работает моно.
По запросу вот соответствующая строка из журнала:
2010-03-08 22:58:00,504 [7] DEBUG Knickle.Framework.Routing.PageRoute (null) - Parameters: {System.String controller=null, System.String path=Page1, System.String path=/Page1, System.String action=null, System.String area=null}
Кроме того, здесь я добавил строку кода над вызовом печати журнала:
parameters.Add("path", "Page1");
Загляните в журнал, и вы заметите, что есть две клавиши «пути». Отладчик показывает оба ключа в разных местах таблицы.