有效地验证在方法内部传递的参数

时间:2018-08-08 14:27:08

标签: c# validation methods

我有一个方法,该方法需要一个OrderedSet类型的对象A X 和一个OrderedSet Y 对象{1}}类型为B的对象。(嵌套

此方法然后根据给定的两个集合返回OrderedSets的新OrderedSet Z

基本上,我给该方法两个集合,并且该方法给我返回连接,就像函数的数学定义一样。

因此,如果要建立双射连接,则必须确保两个集合的大小相等,并且我不希望在任何地方都存在空对象。

问题是,这些集合将任意大,而我想做的是:

  • 确保这些集合中的任何内容都不为空
  • 确保每个集合都有所需的大小

我为获得想要的东西而做的事情:

  • 我将Edges作为具有附加属性的HashSet实现,并且我只使用O(1)的Contains检查空元素(我不确定这是否是一个好的解决方案)
  • OrderedSet拒绝添加OrderedSet对象,但这不会改变在添加元素后将集合中的元素更改为 并将其设置为null的可能性。方式
  • 我尝试采取简便的方法并将方法的内容嵌套在try-catch中,因此,如果出现问题,我只需捕获错误并继续操作,而不必先进行验证所有传递的数据(假设集合可能非常庞大,对其大小没有限制)问题在于,它可能最终会失败,浪费计算时间
  • 我还尝试了蛮力检查,因此基本上检查了每个集合是否为空,包括第二个参数中的集合,还检查了每个集合的正确大小。从理论上讲,这是可行的,但我认为这是不切实际的,并且肯定会为该问题提供更巧妙的解决方案。

我考虑过的:

  • 我已经研究了Contracts,但是this article表现出(根据我的看法)性能显着下降,尽管它确实达到了我想要的目的(但仍以一种怪诞的方式 em>)
  • 我已经阅读了有关应该在C#8.0中出现的不可为空的引用类型的信息,这可能解决了必须检查null元素的问题,但是我仍然会遇到每次我想建立新连接时都必须检查所涉及集合的所有大小的问题。

我的目标: 为参数验证提供一种可读但有效的解决方案。 谢谢您的宝贵时间,如果我说的话不太正确,请随时纠正我。

0 个答案:

没有答案