Разница между FormCollection.AllKeys и FormCollection.Keys

В настоящее время я копаюсь внутри FormCollection в MVC и задаюсь вопросом о разнице в значении и ожидаемом использовании между свойствами AllKeys и Keys. Я знаю, что AllKeys — это string[], а Keys — это KeysCollection, но если бы вам пришлось просматривать поля формы, отправленные во время публикации, зачем бы вы предпочли одно свойство другому? Это просто соглашение использовать AllKeys для быстрой проверки существования определенного ключа? У меня есть несколько кнопок отправки в одной из моих форм, и я использую AllKeys, чтобы быстро проверить, какая из них фактически использовалась для отправки формы, но это заставило меня задуматься о предполагаемой разнице между ними, если она действительно есть.

Большую часть времени я буду использовать привязку модели и передавать объект ViewModel или Command обратно в действие контроллера, но есть ли конкретные варианты использования FormCollection.Keys, о которых я не знаю? Если быстро заглянуть внутрь NameValueCollection и NameObjectCollectionBase, то окажется, что KeysCollection на самом деле просто набор строк, скорее похожий на string[]. Возможно, один из них был представлен в более поздней версии фреймворка, а другой сохранен для обратной совместимости?


person levelnis    schedule 05.02.2013    source источник


Ответы (1)


Похоже, это продукт чистого наследования. Взгляните на диаграмму наследования для FormsCollection (http://msdn.microsoft.com/en-us/library/system.web.mvc.formcollection(v=vs.108).aspx)

FormsCollection наследуется от NameValueCollection, которая наследуется от NameObjectCollectionBase. Ключи определяются в NameObjectCollectionBase и наследуются NameValueCollection, который определяет AllKeys как строковое представление всех ключей. Единственной целью NameValueCollection, по-видимому, является предоставление ключей в виде строк (MSDN: представляет собой набор связанных строковых ключей и строковых значений, доступ к которым можно получить либо с помощью ключа, либо с помощью индекса)

Может быть, есть еще что-то, но это то, что я нашел до сих пор для этого. Пожалуйста, напишите, если вы (или кто-либо другой) найдете какие-либо другие объяснения

person Chintana Meegamarachchi    schedule 06.02.2013
comment
Конечно похоже. Я предполагаю, что AllKeys было добавлено для удобства. Кажется довольно тривиальной вещью, чтобы добавить, когда Keys выполняет ту же работу. Спасибо за ответ - person levelnis; 06.02.2013