2014-11-07 24 views
0

我有这样的功能:如何调用动态参数的方法(可以通过或不)C#

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) 
+0

当你尝试了什么事?请显示您的实际代码,详细告诉我们发生了什么,以及您想要发生什么。 Se http://stackoverflow.com/help/mcve – 2014-11-07 02:06:15

+0

我有一个方法搜索3个参数的产品,每次我打电话给它,我必须通过完整的3个参数,虽然它为空,但我想简单的代码,以什么方式用一个或两个参数来调用它? – 2014-11-07 02:13:27

回答

1

你能做到这样,同一类型的参数将是超载的问题,但我不倾向于超载,而不是这种方法

这样称呼它:

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 
} 
+0

@NguyễnHuy,试试这个。 – DevEstacion 2014-11-07 03:30:44

+0

好的,谢谢,我今天学到了很多,但是这种方式vs超载,哪个更好? – 2014-11-07 04:11:21

+0

请告诉我为什么? – 2014-11-07 04:21:09

1

你可以做到这一点与重载 - 即有多个方法称为MyMethod。它们需要具有不同的签名,意味着不同类型的参数。

所以你必须:

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

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

您还需要你原来的方法 - 这其他方法调用到。

+0

非常感谢您的回答,但是如果method有相同类型的参数吗?我真的很想知道 – 2014-11-07 02:20:54

+0

不幸的是,编译器会抛出语法错误,因为它无法确定您实际调用的是哪种方法。你可以通过给一个方法一个不同的名字,然后调用你的基本方法来解决这个问题,但这可能不符合你的要求。 – 2014-11-07 02:40:20

相关问题