具有很多可选参数的函数有什么约定?

时间:2019-05-02 15:46:12

标签: c# conventions optional-parameters

我有一个简单的HttpsGet函数,需要约20个可选参数。

现在,我正在考虑使每个参数都是可选的,并让用户创建一个将与该功能一起使用的自定义Options对象。不可能创建200个重载。

使该功能对其他用户可读并易于使用的最佳方法是什么?我是否缺少其他解决方案?

为便于阅读,这里是代码的简化版本。

static List<Assignments> GetAllAssignments([Optional] string levels, [Optional] string passed, [Optional] stringresurrected)
{               
    var json = Get($"assignments?{levels}&{passed}&{resurrected}");
    var assignments = JsonConvert.DeserializeObject<CollectionResponse<Assignments>>(json).Data;
    return assignments;            
}

1 个答案:

答案 0 :(得分:2)

通常最好是将其传递给它的“选项对象”,而不是单个值。否则,调用者很容易传递错误的值。

static List<LevelProgression> GetLevelProgressions(LevelProgressionOptions options) 
{ 
}

选项可能看起来像这样

public class LevelProgressionOptions
{
    public LevelProgressionOptions()
    {
        // Set any default values
        SomeProperty = 1;
    }

   public int SomeProperty { get; set; }
   public string AnotherOption { get; set; }
   //  other values omitted
}