需要帮助将此c#代码更改为Vb

时间:2012-03-27 06:42:11

标签: c# vb.net

public void ChangeList(IEnumerable<LineInfo> newLineList)
{
    if (InvokeRequired)
    {
        BeginInvoke((Action<MainForm, IEnumerable<LineInfo>>)((t, e1) => t.ChangeList(e1)), this, newLineList);
        return;
    }
}

4 个答案:

答案 0 :(得分:3)

Public Sub ChangeList(ByVal newLineList As IEnumerable(Of LineInfo))    
    If InvokeRequired Then        
        BeginInvoke( DirectCast( (Sub(t, e1) t.ChangeList(e1)), (Action(Of MainForm, IEnumerable(Of LineInfo)) ) ), Me, newLineList)
        Exit Sub
    End If
End Sub

我在没有编译器的情况下做到了这一点,因此在某个地方的BeginInvoke调用中可能会有一个错误放置的括号,但是否则它应该是正确的。

其他人正在使用的Telerik转换器缺少newLineList参数的泛型类型,并尝试使用Function lambda(期望返回值)而不是Sub lambda(不需要返回值)。

答案 1 :(得分:1)

根据Telerik code converter

Public Sub ChangeList(newLineList As IEnumerable(Of LineInfo))
    If InvokeRequired Then
        BeginInvoke(DirectCast(Function(t, e1) t.ChangeList(e1), Action(Of MainForm, IEnumerable(Of LineInfo))), Me, newLineList)
        Return
    End If    
End Sub

That is not the only converter available,有another one here

修改

您可以通过将其更改为函数来解决编译器警告:

Public Function ChangeList(newLineList As IEnumerable(Of LineInfo))
    If InvokeRequired Then
        BeginInvoke(DirectCast(Function(t, e1) t.ChangeList(e1), Action(Of MainForm, IEnumerable(Of LineInfo))), Me, newLineList)        
    End If
End Function

我现在收到警告,它不会在所有路径上返回值,并且如果您尝试使用结果,则可能会获得空引用异常。只要你没有,你应该没事。

您可以通过明确返回任何内容来删除警告:

Public Function ChangeList(newLineList As IEnumerable(Of LineInfo))
    If InvokeRequired Then
        BeginInvoke(DirectCast(Function(t, e1) t.ChangeList(e1), Action(Of MainForm, IEnumerable(Of LineInfo))), Me, newLineList)        
    End If
    Return Nothing
End Function

虽然这是未经测试的,但可以帮助你

答案 2 :(得分:0)

您是否在线尝试过c#to vb转换器? c# to VB converter

Public Sub ChangeList(newLineList As IEnumerable)
If InvokeRequired Then

    BeginInvoke(DirectCast(Function(t, e1) t.ChangeList(e1), Action(Of MainForm, IEnumerable(Of LineInfo))), Me, newLineList)
    Return
End If

End Sub

答案 3 :(得分:0)

Public Sub ChangeList(newLineList As IEnumerable)
    If InvokeRequired Then

        BeginInvoke(DirectCast(Function(t, e1) t.ChangeList(e1), Action(Of MainForm, IEnumerable(Of LineInfo))), Me, newLineList)
        Return
    End If

End Sub

你可能想要编辑你的问题并使用它 http://www.developerfusion.com/tools/convert/csharp-to-vb/