C# 我可以在C中把条件作为参数传递给方法吗#
我有两个按钮做相同的功能,但在不同的条件。 有这样的代码C# 我可以在C中把条件作为参数传递给方法吗#,c#,c#-4.0,C#,C# 4.0,我有两个按钮做相同的功能,但在不同的条件。 有这样的代码 private void button1_Click(){ // do function1 if(condition){ ...decrement an integer //do function2 } } private void button2_Click(){ // do function1 if(another condition){ ...increment an integer //d
private void button1_Click(){
// do function1
if(condition){
...decrement an integer
//do function2
}
}
private void button2_Click(){
// do function1
if(another condition){
...increment an integer
//do function2
}
}
我可以将条件1和条件2以及递增和递减传递给方法吗?您可以通过将条件1和条件2包装到方法中,并将它们用作委托,从而将它们传递给方法 例如,具有委托签名的消息可能需要一个接受x个输入并返回布尔值的方法。然后为条件1和条件2创建与该签名匹配的方法,并将适当的方法传递给该方法 在方法内部,您只需调用委托,就好像它是一个方法一样(实际上,它是)
查看Microsoft关于代理的文档:您可以尝试以下方法:
private void buttonClick()
{
DoSomething(condition ? true : false);
}
private void DoSomething(bool increment)
{
// do stuff
if (increment)
++index;
else
--index;
}
condition => {
if (condition)
index++;
else
index--;
}
为什么不将重复的代码提取到方法中
private void Function1()
{
// do function1
}
private void Function2()
{
// do function2
}
private void button1_Click()
{
Function1() ;
if(condition)
{
//...decrement an integer
Function2();
}
}
private void button2_Click()
{
Function1();
if(another condition)
{
//...increment an integer
Function2();
}
}
如果你有很多相似的方法,那么就考虑创建< /P>
private void DoSomething(Func<bool> condition, Action action)
{
Function1();
if (condition())
{
action();
Function2();
}
}
如果您的条件和操作不是那么简单,请使用命名方法而不是lambdas:
private bool FooCondition(int x)
{
// complex condition here
}
private string BarAction(int x)
{
// complex action here
}
private void button2_Click()
{
DoSomething(FooCondition, BarAction);
}
如果您使用的是.NET3.0,则可以向该方法传递一个。这两个类都采用参数,但不存在参数。 返回布尔值和参数的
Func
可以使用如下lambda编写:
private void buttonClick()
{
DoSomething(condition ? true : false);
}
private void DoSomething(bool increment)
{
// do stuff
if (increment)
++index;
else
--index;
}
condition => {
if (condition)
index++;
else
index--;
}
Func
可以保存到变量中,并根据需要传递。可以。但你的能力仍然有限。考虑这个
public void Foo(Action action, Func<Boolean> someCondition) {
if (someCondition() == true) action();
}
public void Foo(Action-Action,Func-someCondition){
如果(someCondition()==true)action();
}
如果这些条件相对简单,则a可能比每个条件的单独方法更具可读性。您可以将lambda传递给您的方法并执行它,也可以不执行。是的,您可以。。。但是你能详细说明这个问题吗?你说的是什么情况?inc,dec可以通过,是。@Sharmi条件大于或小于。@user1340443可能是您应该看一个类似的问题:。可能有帮助,但我没有遇到这种情况…:)特别是,这可能会有帮助:)为什么要编写条件?真:假
而不是简单的条件
?条件?真:假
如果你在我的代码库中写这样的代码,你会被枪毙的!为什么写<代码>如果(条件()==true)< /代码>而不是简单的<代码>(条件())< /代码>?个人偏好,我认为它更可读。我还使用condition()==false。重命名condition方法后,使用例如:if(IsAvailable()==true){//do something}
将增加比简单读取更多的噪音。与if(IsAvailable()){//do something}
Function2比较,从function1获取一些值。@user1340443然后不要将函数提取到方法。或者将这些值作为参数传递。