有没有办法要求两个可选的方法参数成对使用

本文关键字:方法 参数 两个 有没有 | 更新日期: 2023-09-27 18:01:03

在我的泛型接口中,我有一个具有可选参数的函数。我这样写是为了遵循DRY(D关于非RepeatY我们自己(。虽然函数是有效的,而且我在函数中有逻辑来处理尽可能多的假设,但我觉得除非我能强制正确使用该方法,否则这项工作是不完整的。

我想做的是强制执行一个规则,使前两个参数作为一对使用,或者使用第三个参数,而不是两者都使用。我设置它是为了使一个函数适用于尽可能多的情况。虽然我可以为这个函数编写不同的重载以确保它被正确使用,但我想确保函数定义中没有任何内容可以确保在不必编写同一函数的两个变体的情况下强制使用参数。

我回到了基础知识,看了《C#编程指南》,虽然我发现了一些有用的复习内容,但我没有看到任何与这个问题有关的内容。

有没有一种方法可以内联强制执行此规则,或者创建单独的重载是执行此规则的唯一方法?

IQueryable<TEntity> GetByFilter(
    string byWhereColumn=null, string byWhereValue = null,   
    string byWhereString = null,  
        string byOrder = null,
        string byDir = null
        );

有没有办法要求两个可选的方法参数成对使用

根据我的评论,我认为您需要使用单独的重载,我理解您不想重复代码,但到目前为止您只能简化它,并且重载方法、构造函数等在必要时不会重复。

MyMethod (param1, param2){...
MyMethod (param3){...

要将参数的使用指示为对,可以使用Tuple,或者更好的是,使用特定的类来强制使用对。这也适用于已经接受的答案:

元组示例:

public IQueryable<TEntity> GetByFilter(
    Tuple<String, String> byWhereValueAndColumn = null,
    string byWhereString = null,
    string byOrder = null,
    string byDir = null
    );

类示例:

public IQueryable<TEntity> GetByFilter(
    ColumnAndValue byWhere = null,
    string byWhereString = null,
    string byOrder = null,
    string byDir = null
    );
public class ColumnAndValue {
    public String Column { get; private set; }
    public String Value { get; private set; }
    public ColumnAndValue(string column, string value) {
        Column = column;
        Value = value;
    }
}

当然,API用户仍然可以将该对的任何参数设置为null,但通过这种方式,您至少可以非常强烈地指示应该如何使用API。