如何将参数传递给方法作为语句。我有这样的方法 我尝试在不使用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.clear
和tp21txtBillNo.focus
下显示红色错误颜色。这样的语句中不支持Action
吗?
(寻找C#和VB.Net变体)
答案 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));