如何在C#中绕过函数参数?

如何在C#中绕过函数参数?,c#,.net,function,C#,.net,Function,我正在寻找绕过函数参数的方法。假设我有一个函数: void getDataFromDB(int? ID, string name) {....} 我想知道绕过ID或名称的方法,smt如下: entity.getDataFromDB(42); void getDataFromDB(int id) { … } void getDataFromDB(string name) { … } 或 我不会这样调用函数: entity.getDataFromDB(null,"Customer"); 我

我正在寻找绕过函数参数的方法。假设我有一个函数:

void getDataFromDB(int? ID, string name) {....}
我想知道绕过ID或名称的方法,smt如下:

entity.getDataFromDB(42);
void getDataFromDB(int id) { … }

void getDataFromDB(string name) { … }

我不会这样调用函数:

entity.getDataFromDB(null,"Customer");
我知道我可以使用默认值,也可以对最后一个参数使用params。 有什么好主意吗?

C#有两种减少功能参数的方法:

默认值(仅当没有“标准”参数时有效):

方法重载:

void getDataFromDB(int? ID, string name) {....} 
void getDataFromDB(string name) => getDataFromDB(null, name); // overload using lambda

合并命名和可选可能会有所帮助

void getDataFromDB(int? ID = null, string name = null) {....}
允许

getDataFromDB(ID:42);
getDataFromDB(name:"eric");

从外观上看,您可以通过
name
id
(而不是两者)获取数据。如果是这样的话,那么在我看来,这是两个截然不同的操作,可以通过如下方法重载来解决:

entity.getDataFromDB(42);
void getDataFromDB(int id) { … }

void getDataFromDB(string name) { … }
如果上述两个方法之间有公共代码,那么可以将公共代码分开,并从每个方法调用


就个人而言,我会避免使用
null
参数,因为我们需要在方法中添加额外的
null
检查。它为潜在的bug打开了大门。

您可以控制这些方法吗?您可以将参数设置为可选参数,但如果您无法修改源代码,则必须传递一些信息为什么我不会这样调用函数:?听起来这个功能不仅仅是一个职责。。如果您可以更改该方法,那么共享该方法的代码将非常有用。您可以将命名参数与选项一起使用,听起来该方法的简单重载应该正是您想要的。假设您可以控制方法源。