如何将方法作为Action参数传递

时间:2015-01-30 03:11:23

标签: vb.net

如何将参数传递给方法作为语句。我有这样的方法 我尝试在不使用IIF关键字的情况下激励C#中的三元运算符到vb.net

Protected Friend Sub TernaryOperater(ByVal condition As Boolean, _
   ByVal truePart As action, Optional ByVal falsePart As action = Nothing)
  If condition Then
      truePart()
  Else
      falsePart()
  End If
End Sub

我将这种方法称为:

TernaryOperater(DataGridView1.Rows.Count > 0, _
    tp21txtBillNo.Clear, tp21txtBillNo.focus)

在声明tp21txtBillNo.cleartp21txtBillNo.focus下显示红色错误颜色。这样的语句中不支持Action吗?

(寻找C#和VB.Net变体)

1 个答案:

答案 0 :(得分:2)

在VB / Net中传递Action / Func的语法:

TernaryOperater(true, Function() OneArg(42), AddressOf   NoArgs) 

更多信息:

首先要成为真正的“三元运算符”(正确命名为“条件运算符”),您应该使用Func<T>作为参数,以便它可以返回结果。

作为Func<T>Action<T>传递的方法签名应该与没有参数的类型 - 函数匹配,并为Func<T>返回类型T,函数(sub)没有{{1}的参数}}。如果它不匹配 - 你可以用lambda表达式内联它 - lambda expressions in VB.Net

C#:      int Twice(int value){return 2 * Value;}      int Half(int value){return 2 * Value;}

Action<T>

VB.Net:

 T Ternary<T>(bool condition, Func<T> onTrue, Func<T> onFalse) 
 {
     return condition ? onTrue() : onFalse();
 }

 void StrangeIf(bool condition, Action onTrue, Action onFalse) 
 {
     if (condition) 
        onTrue() 
     else 
        onFalse();
 }
 ...

 StrangeIf(true, ignore => Twice(42), ignore => Halhf(42));
 var r = Ternary<int>(true, ignore => Twice(42), ignore => Halhf(42));