Существует много типов использования текстовых полей с паролем в ASP. NET MVC
С элементами управления html это будет выглядеть так:
<input type="password" name="xx" id="yy">
С Razor-синтаксисом это будет похоже на:
@Html.Password(name, value, html_attributes)
Или в строго типизированном виде мог написать
@Html.PasswordFor(model=>model.Password)
Это уже IDataRecord
.
Это должно дать вам примерно такой же доступ (по ключу), что и словарь. Поскольку в строках обычно не более нескольких горсток столбцов, производительность поиска не должна сильно отличаться. Единственное важное различие - это тип «полезной нагрузки», и даже там ваш словарь должен будет использовать объект для типа значения, поэтому я даю преимущество IDataRecord.
Проще, чем это?:
// Need to read the row in, usually in a while ( opReader.Read ) {} loop...
opReader.Read();
// Convert current row into a dictionary
Dictionary<string, object> dict = new Dictionary<string, object>();
for( int lp = 0 ; lp < opReader.FieldCount ; lp++ ) {
dict.Add(opReader.GetName(lp), opReader.GetValue(lp));
}
Я все еще не уверен, зачем вам нужно именно это преобразование из одного типа коллекции в другой.
Я никогда не использовал Java, но с тех пор, как я прочитал
Я совершенно уверен, что мне не нравятся проверенные исключения (в текущей реализации).
Два основных упомянутых момента заключаются в следующем.
Версионность
Андерс Хейлсберг: Давайте начнем с управления версиями, потому что проблемы там довольно легко увидеть. Скажем, я создаю метод foo, который объявляет, что он генерирует исключения A, B и C. Во второй версии foo я хочу добавить кучу функций, и теперь foo может генерировать исключение D. Это критическое изменение для меня. добавьте D в предложение throws этого метода, потому что существующий вызывающий этого метода почти наверняка не обработает это исключение.
Добавление нового исключения в предложение throws в новой версии приводит к нарушению клиентского кода. Это похоже на добавление метода в интерфейс. После публикации интерфейса он остается неизменным для всех практических целей, потому что в любой его реализации могут быть методы, которые вы хотите добавить в следующую версию. Поэтому вместо этого вам нужно создать новый интерфейс. Точно так же с исключениями вам придется либо создать полностью новый метод с именем foo2, который генерирует больше исключений, либо вам придется перехватить исключение D в новом foo и преобразовать D в A, B или C.
Масштабируемость
Андерс Хейлсберг: Проблема масштабируемости в некоторой степени связана с проблемой версии. В небольших, проверенные исключения очень заманчивы. На небольшом примере вы можете показать, что действительно проверили, что вы поймали FileNotFoundException, и разве это не здорово? Что ж, это нормально, когда вы просто вызываете один API. Проблема начинается, когда вы начинаете строить большие системы, в которых вы разговариваете с четырьмя или пятью различными подсистемами. Каждая подсистема выдает от четырех до десяти исключений. Теперь, каждый раз, когда вы поднимаетесь по лестнице агрегации, у вас под вами появляется экспоненциальная иерархия исключений, с которыми вам приходится иметь дело. В итоге вам придется объявить 40 исключений, которые вы можете выбросить. И как только вы объедините это с другой подсистемой, у вас будет 80 исключений в вашем предложении throws. Он просто выходит из-под контроля.
В целом, отмеченные исключения становятся таким раздражителем, что люди полностью обходят эту функцию. Либо они говорят «бросает исключение» везде; или - и я не могу сказать вам, сколько раз я это видел - они говорят: «Попробуй, да да да да да, Это поможет?