




Он используется для сериализации состояния просмотра (вместе со своим двоюродным братом Triplet).
Я предполагаю, что причина, по которой они не являются частью базовой библиотеки (хотя в них нет ничего специфичного для ASP.NET), заключается в том, что они не очень полезны, поскольку они нетипизированы.
Включение нетипизированной пары и триплета в базовую библиотеку можно рассматривать как поощрение «бестипового» программирования.
Однако типизированный кортеж может быть полезен (и я думаю, что в F# они есть). Я думаю, что анонимные типы охватывают большинство случаев использования гетерогенных кортежей.
@John MacIntyre: вы можете использовать его в базовой DLL, вам просто нужно включить ссылку на сборку System.Web.UI.
Я понимаю это, но если DLL использовалась, например, для консольного приложения, не кажется ли странным иметь зависимость от сборки веб-интерфейса? Разве это не должно быть просто в пространстве имен System?
@John MacIntyre: Да, кажется странным иметь зависимость от сборки веб-интерфейса из консольного приложения, но это то, что вам нужно сделать. Кроме того, из ответа @bdukes, похоже, это невозможно из-за AspNetHostingPermission LinkDemand.
@Giao - похоже, нет.
Для его использования в режиме просмотра читателей может заинтересовать мой ответ на вопрос о состоянии просмотра, в котором объясняется, как вручную изменять состояние просмотра и состояние управления: stackoverflow.com/a/3865762/205245
Не думаю, что ты найдешь серьезную причину. Кажется, что он был впервые создан веб-командой, поэтому они сделали это в своем пространстве имен / сборке. Они также добавили LinkDemand для AspNetHostingPermission, что прискорбно.
Что касается "ожидаемого использования", MSDN сообщает
[The Pair class] is a utility class that is used in various ways throughout ASP.NET, such as during page state management tasks or in configuration section handlers.
...
The Pair class can be used in several ways in page state persistence implementations. The most common use is as a container for both the ViewState and ControlState collections. In this case, the First property is used for ViewState, and the Second for ControlState.
У меня всегда было впечатление, что это было запоздалой мыслью, чего хотела команда пространства имен web.ui, но не имела возможности поместить это в пространство имен системы. Это то, что меня всегда съедало, и мне было интересно, есть ли логическая причина, по которой я не мог видеть.
В худшем случае, развитие Silo'd :(
Не дай бог, у нас должна быть типизированная Pair, которая легче словаря и может быть встроена в типизированный список, чтобы его можно было индексировать :). Конечно, создание одного из них безболезненно, но зачем?
Это не дает прямого ответа на вопрос, но в .NET 4 вы можете и, вероятно, должны использовать Кортеж.
Чтобы ответить на вопрос, я считаю, что было просто ошибкой помещать Pair в System.Web.UI, и Microsoft попыталась исправить эту ошибку, представив класс Tuple.
Я могу понять, почему вы можете захотеть использовать его в веб-приложении, но почему бы не сделать его доступным во всей библиотеке? Например, почему я не могу использовать его в базовой DLL?