Почему пара находится в System.Web.UI?

По крайней мере, для меня класс Pair - очень многоцелевой класс. Так почему же Microsoft поместила его в пространство имен System.Web.UI?

Есть ли причина, которую мой крошечный мозг не может понять?

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
1 552
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Он используется для сериализации состояния просмотра (вместе со своим двоюродным братом Triplet).

Я предполагаю, что причина, по которой они не являются частью базовой библиотеки (хотя в них нет ничего специфичного для ASP.NET), заключается в том, что они не очень полезны, поскольку они нетипизированы.

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

Однако типизированный кортеж может быть полезен (и я думаю, что в F# они есть). Я думаю, что анонимные типы охватывают большинство случаев использования гетерогенных кортежей.

Я могу понять, почему вы можете захотеть использовать его в веб-приложении, но почему бы не сделать его доступным во всей библиотеке? Например, почему я не могу использовать его в базовой DLL?

John MacIntyre 03.12.2008 21:30

@John MacIntyre: вы можете использовать его в базовой DLL, вам просто нужно включить ссылку на сборку System.Web.UI.

Scott Dorman 03.12.2008 21:33

Я понимаю это, но если DLL использовалась, например, для консольного приложения, не кажется ли странным иметь зависимость от сборки веб-интерфейса? Разве это не должно быть просто в пространстве имен System?

John MacIntyre 03.12.2008 21:35

@John MacIntyre: Да, кажется странным иметь зависимость от сборки веб-интерфейса из консольного приложения, но это то, что вам нужно сделать. Кроме того, из ответа @bdukes, похоже, это невозможно из-за AspNetHostingPermission LinkDemand.

Scott Dorman 03.12.2008 21:37

@Giao - похоже, нет.

John MacIntyre 03.12.2008 21:38

Для его использования в режиме просмотра читателей может заинтересовать мой ответ на вопрос о состоянии просмотра, в котором объясняется, как вручную изменять состояние просмотра и состояние управления: stackoverflow.com/a/3865762/205245

Owen Blacker 21.07.2012 23:53
Ответ принят как подходящий

Не думаю, что ты найдешь серьезную причину. Кажется, что он был впервые создан веб-командой, поэтому они сделали это в своем пространстве имен / сборке. Они также добавили 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, но не имела возможности поместить это в пространство имен системы. Это то, что меня всегда съедало, и мне было интересно, есть ли логическая причина, по которой я не мог видеть.

John MacIntyre 03.12.2008 21:55

В худшем случае, развитие Silo'd :(

ShuggyCoUk 24.02.2009 21:30

Не дай бог, у нас должна быть типизированная Pair, которая легче словаря и может быть встроена в типизированный список, чтобы его можно было индексировать :). Конечно, создание одного из них безболезненно, но зачем?

Это не дает прямого ответа на вопрос, но в .NET 4 вы можете и, вероятно, должны использовать Кортеж.

Чтобы ответить на вопрос, я считаю, что было просто ошибкой помещать Pair в System.Web.UI, и Microsoft попыталась исправить эту ошибку, представив класс Tuple.

Другие вопросы по теме