【问题标题】:c# getting a configurable equatable method时间:2019-04-01 标签:c#gettingaconfigurableequatablemethod
【发布时间】:2013-04-11 21:27:05
【问题描述】:

我有一个用 C# 构建的简单工厂,它实例化和配置在 ASP.net 和 JavaScript 中构建的验证器。我想要一种方法来测试我是否不小心在同一个控件上设置了两次验证器(例如,有两个 RequiredValueValidators 不是一个好主意,可能会导致 ui/ux 问题),但我也希望确保保留使用相同构建机制但方式不同的验证器(例如两个使用不同 RE 的 RegularExpressionValidators,但不是两个使用相同 RE。)

我尝试了一些不同的可能技术,我将在下面详细说明这些技术 - 但本质上我需要一种技术来传递关于如何比较相同基本类型的两个验证器以辨别它们是否相等的描述(NB 'equal' 不是 'identical',它们可能有不同的 ID(等)但仍然做同样的工作。)在运行时可解释,并且我的 c# .dll 的其他区域实际上可以访问运行检查。

我的答案将是社区 wiki,其目的是让社区编辑/纠正/讨论我陷入的错误/陷阱,而不是仅仅因为最初不正确而被否决,所以让其他人不会遭受同样的命运。

【问题讨论】:

  • 为什么不能用Equals()来比较?可能我没有正确理解你的问题
  • 我看不到基类。

标签: c# .net equality predicate iequalitycomparer


【解决方案1】:

我还尝试在我的工厂中创建一个小型静态开关盒方法,该方法将能够简单地输出另一个由开关盒创建的小型配置类。这本质上比上一个问题要简单得多,但也不是没有问题。例如,我无法正确定义我的返回和参数类型,以便RegularExpressionValidator 可以在与ValidDateValidatorcheck 相同的代码块中检查它是否正确。

【讨论】:

    【解决方案2】:

    我的一个尝试是将谓词设置为我的工厂中构建验证器的方法的属性。然后将通过在其他地方使用反射来访问它,然后用于比较两个潜在的验证器。

    这方面的一个主要缺陷是您不能将谓词(或就此而言的委托)设置为属性。

    A possible work-around 是您提供单个属性的位置(包含谓词委托或IEquatable<> 实现然后检索它 - 但是在比较验证器时需要考虑很多不同的事情(什么类型,配置,它依赖其他控件等....)所以除非您可以创建一个可以处理不同类型的IEquatable<ValidatorType> 的基类或接口,否则这也是不可能的...

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 2016-10-23
      • 2011-01-31
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多