【问题标题】:C# to VB.NET Code ConversionC# 到 VB.NET 代码转换
【发布时间】:2013-08-24 22:40:22
【问题描述】:

早安,

我在将函数从 C# 转换为 VB.NET 时遇到了一点问题。代码如下:

    public static IEnumerable<string> Lexicograph(List<string> characters, int length)
    {
        for (int i = 0; i < characters.Count; i++)
        {
            if (length == 1)
                yield return characters[i];

            else
                foreach (string nxt in Lexicograph(characters.GetRange(i + 1, characters.Count - (i + 1)), length - 1))
                    yield return characters[i] + " " + nxt;
        }
    }

我知道有一些在线转换器,但由于编译器说我的代码中存在错误/警告(从 String 到 IEnumerable 的转换),所以这些转换器无法正常工作。

我对列表和 IEnumerable 接口不太熟悉,这就是我来这里的原因。

如果有人能找到这个或任何其他类型的提示的解决方案,我们将不胜感激。

提前致谢。

【问题讨论】:

  • 到目前为止,您还没有显示任何代码来显示您尝试过的内容。 SO 不是翻译服务。
  • 我们不是来帮你转换的。如果您发布转换后的代码并突出显示错误出现的位置,您可能会获得更多帮助。
  • VB.NET 不提供迭代器块。在此处查看我的旧问题:stackoverflow.com/questions/3811589/…Edit 现在似乎在 VS 2012 中受支持:msdn.microsoft.com/en-us/library/vstudio/…

标签: c# vb.net


【解决方案1】:

如果您使用的是 Visual Studio 2012:

Public Shared Iterator Function Lexicograph(characters As List(Of String), length As Integer) As IEnumerable(Of String)
    For i = 0 To characters.Count - 1
        If length = 1 Then
            Yield characters(i)
        Else
            For Each nxt In Lexicograph(characters.GetRange(i + 1, characters.Count - (i + 1)), length - 1)
                Yield characters(i) & " " & nxt
            Next
        End If
    Next
End Function

如果您使用的是旧版本并且可以使用非惰性变体:

Public Shared Function LexicographNonLazy(characters As List(Of String), length As Integer) As IEnumerable(Of String)
    Dim result = new List(Of String)
    For i = 0 To characters.Count - 1
        If length = 1 Then
            result.Add(characters(i))
        Else
            For Each nxt In Lexicograph(characters.GetRange(i + 1, characters.Count - (i + 1)), length - 1)
                result.Add(characters(i) & " " & nxt)
            Next
        End If
    Next
    Return result
End Function

【讨论】:

    【解决方案2】:

    试试这个:

    Public Shared Iterator Function Lexicograph(ByVal characters As List(Of String), ByVal length As Integer) As IEnumerable(Of String)
            For i As Integer = 0 To characters.Count - 1
                If length = 1 Then
                    Yield characters(i)
    
                Else
                    For Each nxt As String In Lexicograph(characters.GetRange(i + 1, characters.Count - (i + 1)), length - 1)
                        Yield characters(i) & " " & nxt
                    Next nxt
                End If
            Next i
     End Function
    

    【讨论】:

      【解决方案3】:

      试试这个代码..想想它可能会解决..

      编辑

        Public Shared Function Lexicograph(characters As List(Of String), length As Integer) As IEnumerable(Of String)
        For i As Integer = 0 To characters.Count - 1
          If length = 1 Then
              yield Return characters(i)
          Else
      
              For Each nxt As String In Lexicograph(characters.GetRange(i + 1, characters.Count - (i + 1)), length - 1)
                  yield Return characters(i) + " " & nxt
              Next
          End If
      Next
      End Function
      

      通过使用转换:Code Translator C# to VB

      【讨论】:

      • 我怀疑这会编译 - 为什么 VB.Net 会突然恢复为 yield 的小写关键字?
      • 这段代码显然行不通。 If (length = 1) Then yield End If? yield 什么?什么都没有?
      • 您只能在标有Iterator 的方法中使用Yield。此外,yield Return characters(i) 应该只是 Yield characters(i)。您只是复制/粘贴了在线转换器的错误结果。
      • 解决方法是将C#编码转换为“C#到VB.NET代码转换”。我们刚刚将解决方案转换为 VB.NET。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多