如何使用动态参数(可以通过或不通过)调用方法C#

如何使用动态参数(可以通过或不通过)调用方法C#,c#,asp.net,parameters,C#,Asp.net,Parameters,我有这样一个函数: public void MyMethod(string param1=null, int? param2=null, Datetime? param3=null) { //do something } 所以当我称之为: MyMethod(param1,null,null) or MyMethod(null,param2,null) ... 但我不喜欢上面的方式,我可以称之为: MyMethod(param1) or MyMethod(param2) or MyM

我有这样一个函数:

public void MyMethod(string param1=null, int? param2=null, Datetime? param3=null)
{
     //do something
}
所以当我称之为:

MyMethod(param1,null,null) or MyMethod(null,param2,null) ...
但我不喜欢上面的方式,我可以称之为:

MyMethod(param1) or MyMethod(param2) or MyMethod(param3)

您可以使用重载来实现这一点,也就是说,有多个名为MyMethod的方法。不过,它们需要有不同的签名,即不同类型的参数

所以你会:

public void MyMethod(string param1)
{
     MyMethod(param1, null, null);
}

public void MyMethod(int param2)
{
     MyMethod(null, param2, null)
}

您还需要您的原始方法—其他方法调用它。

您可以这样做,相同类型的参数在重载时会有问题,但我更喜欢重载而不是这种方法

可以这样称呼:

public void Main(string[] args)
{
    MyMethod(param2: value);
    MyMethod(param1: value);
    MyMethod(param3: value);
}

public void MyMethod(string param1=null, int? param2=null, Datetime? param3=null)
{
     //do something
}

当你尝试时发生了什么?请出示您的实际代码,详细告诉我们发生了什么,以及您希望发生什么。Se我有一个方法搜索3个参数的产品,每次我调用它,我必须传递完整的3个参数,虽然它为空,但我想简单的代码,用一个或两个参数怎么调用它?非常感谢你的回答,但如果方法有相同类型的参数,我真的想知道,不幸的是,编译器会抛出一个语法错误,因为它无法确定您实际调用的是哪个方法。您可以通过给一个方法一个不同的名称,然后调用基本方法来解决这个问题,但这可能不符合您的要求。@Nguyễn Huy,试试这个。好的,谢谢你,我今天学到了很多,但是这种方式与重载相比,哪一种更好?重载更好,因为你可以控制必须传入多少个参数。在@RonaldEstacion示例中,可以直接调用底层方法而不传入任何参数-编译器不会检测到这是不正确的。@NguyễnHuy因为在重载中,就像greg说的,你可以控制参数,而且比这样做更干净。比如说,如果通过传递param1调用MyMethod,您就有pre-task要做,您可以在那里控制它。如果你有很多参数,我建议把它包装在一个类中。非常感谢你的解释,很容易理解。