【问题标题】:Why is the Pair in System.Web.UI?为什么是 System.Web.UI 中的 Pair?
【发布时间】:2008-12-03 18:27:21
【问题描述】:

至少对我来说,Pair 类是一个用途非常广泛的类。那么微软为什么要把它放到 System.Web.UI 命名空间中呢?

我的小脑袋无法理解有什么原因吗?

谢谢。

【问题讨论】:

    标签: .net class


    【解决方案1】:

    它用于序列化视图状态(连同它的表亲 Triplet)。

    我猜想它们不是基础库的一部分的原因(即使它们没有任何特定于 ASP.NET 的内容)是因为它们没有类型,所以不是很有用。

    在基本库中包含无类型对和三元组,可能被视为鼓励“无类型”编程。

    不过,类型化元组可能很有用(我认为 F# 有它们)。我认为匿名类型涵盖了异构元组的大部分用例。

    【讨论】:

    • 我可以理解为什么你可能想在 web 应用程序中使用它,但为什么不让它在整个库中可用呢?例如,为什么我不能在基本 DLL 中使用它?
    • @John MacIntyre:您可以在基本 DLL 中使用它,您只需包含对 System.Web.UI 程序集的引用。
    • 我意识到这一点,但是如果 DLL 用于控制台应用程序,那么依赖于 web ui 程序集不是很奇怪吗?真的不应该只是在 System 命名空间中吗?
    • @John MacIntyre:是的,从控制台应用程序依赖 Web ui 程序集似乎很奇怪,但这就是您需要做的。此外,从@bdukes 的回答来看,由于 AspNetHostingPermission LinkDemand,这似乎是不可能的。
    • @Giao - 好像没有。
    【解决方案2】:

    我不认为你会找到一个很好的理由。似乎它最初是由网络团队创建的,所以他们在他们的命名空间/程序集中创建了它。他们还为AspNetHostingPermission 添加了LinkDemand,这很不幸。

    就其“预期用途”而言,MSDN 表示

    [Pair 类] 是一个实用程序类,在整个 ASP.NET 中以各种方式使用,例如在页面状态管理任务期间或在配置节处理程序中。
    ...
    Pair 类可以在页面状态持久性实现中以多种方式使用。最常见的用途是作为ViewStateControlState 集合的容器。在这种情况下,First 属性用于ViewStateSecond 用于ControlState

    【讨论】:

    • 我一直觉得这是事后的想法,web.ui 命名空间团队想要的东西,但没有能力将它放入系统命名空间。这是我一直在吃的东西,我想知道是否有我看不到的合乎逻辑的原因。
    • 孤岛式开发是最糟糕的:(
    【解决方案3】:

    这并不能直接回答问题,但在 .NET 4 中,您可以并且可能应该使用 Tuple

    为了回答这个问题,我认为将 Pair 放在 System.Web.UI 中只是一个错误,微软试图通过引入 Tuple 类来解决这个错误。

    【讨论】:

      【解决方案4】:

      上帝保佑我们应该有一个比字典更轻的类型 Pair 并且可以嵌入到类型列表中以便它是可索引的:)。当然,创建其中之一是无痛的,但是为什么。

      【讨论】:

        猜你喜欢
        • 2013-03-22
        • 2010-09-11
        • 2011-08-07
        • 1970-01-01
        • 2023-03-28
        • 2015-01-07
        • 2010-09-14
        • 1970-01-01
        • 2012-11-24
        相关资源
        最近更新 更多