c#到vb.net转换 - Action(Of T,string)作为元组项

时间:2015-12-02 18:13:19

标签: c# vb.net

我正在尝试将元组从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吗?感谢。

3 个答案:

答案 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