我还寻求一种强制命名参数的方法。可选参数可能很危险,尤其是当您有多个相同类型的参数时。重载几乎总是一个更安全的解决方案,但有时你有一个方法可以接受许多参数组合,因此创建 20 个重载来考虑任何可能性是矫枉过正的。
在极端情况下,始终命名参数至关重要,我将创建一个没有定义构造函数的参数类。在你的情况下,你可以这样做:
public class UserRegistrationArguments
{
public string nameFirst { get; set; }
public string nameLast { get; set; }
public string nameMiddle { get; set; }
public string email { get; set; }
}
像这样称呼它:
RegisterUser(new UserRegistrationArguments { nameFirst = "Bob", nameLast = "Slob" });
您也可以像这样简化它:
public class UserRegistrationArguments
{
public string nameMiddle { get; set; }
public string email { get; set; }
}
int RegisterUser(string nameFirst, string nameLast, UserRegistrationArguments args = null)
...然后这样做:
RegisterUser("Bob", "Slob", new UserRegistrationArguments { nameMiddle = "Teh" });
这样,您只有一个可选参数,即您的可选参数。
编辑: 也许我没有正确阅读 OP。您没有使用可选参数吗?如果没有,那么这个答案可能对您没有帮助。