我正在尝试将元组从c#转换为vb.net。这是元组的声明 -
private List<Tuple<string, string, Action<T, string>>> items = new List<Tuple<string, string, Action<T, string>>>();
我将项目添加到Item3(动作),就像这样 -
foreach(var iforeach(var i in items)
{
i.Item3(t, string.Empty);
}
在vb.net中,我将我的元组定义如下 -
Private list As New List(Of Tuple(Of String, String, Action(Of T, String)))
并尝试将动作添加到Item3,如下所示 -
Dim mytype = Activator.CreateInstance(Of T)
For Each item As Tuple(Of String, String, Action(Of T, String)) In list
item.Item3(mytype, String.Empty)
Next
我尝试过不同方法的各种迭代来将Action添加到Item3,但似乎没有用。 对于上面的示例,我在VS中获得以下消息 - 参考....的参数数量不正确
任何人都可以了解如何将其转换为vb.net吗?感谢。
答案 0 :(得分:5)
您不需要使用单独的变量 - 只需使用显式空括号对来防止编译器混淆(将“Item3”误解为参数化属性,如Darryl所说):
For Each i In items
i.Item3()(mytype, String.Empty)
Next i
答案 1 :(得分:3)
VB编译器将有问题的代码行解释为参数化属性。有两种方法:
For Each item in list
'option 1
item.Item3.Invoke(mytype, String.Empty)
'option 2
Dim a = item.Item3
a(mytype, String.Empty)
Next
答案 2 :(得分:2)
您可以将操作拉入变量以调用它:
For Each item As Tuple(Of String, String, Action(Of T, String)) In list
Dim a as Action(Of T, String) = item.Item3
a(t, String.Empty)
Next