循环遍历数组并插入项目

时间:2015-07-02 08:21:17

标签: vb.net loops

我正在开展一个项目,在那里我将VB.net解决方案代码文件读入List(Of File)(文件是自定义类),然后循环遍历Code(代码为{ {1}})每个文件的属性。

我想在该循环中做的是添加随机代码,但我在确定如何使其正常工作时遇到了一些麻烦。

问题是代码插入了我不希望插入的地方。

我尝试了几种不同的方法:

  1. 只需循环遍历Code属性并在条件合适时添加行。

  2. 添加另一个属性:List(Of String),然后循环遍历并使用新属性值将行插入代码属性。

  3. 添加另一个属性:Public Indices As List(Of Integer),为其分配Code属性,然后循环遍历新属性并向Code属性添加行

  4. 代码是什么样的:

    Public InsertionLoopCode As List(Of String)

    我不认为这是条件语句,或者至少不仅仅是因为它在我不插入行时工作正常,而只是做msg框或写入控制台。

    编辑:使其更清晰。 之前:

    For Each Folder As Folder In Folders
        For Each File As File In Folder.Files
            For i = 0 To File.InsertionLoopCode.Count - 1
                If File.InsertionLoopCode(i).Contains(" Sub ") AndAlso Not File.InsertionLoopCode(i).Contains("Delegate") Then
                    StartSub = True
                ElseIf File.InsertionLoopCode(i).Contains("End Sub") Then
                    StartSub = False
                ElseIf StartSub = True AndAlso Not File.InsertionLoopCode(i).Contains(" Sub ") Then
                    If i Mod Randomization.Random.Next(1, 5) = 0 Then
                        Dim RandomNumber As Integer = Random.Next(0, 2)
    
                        If RandomNumber = 0 Then
                            'File.Code.Insert(i, Insertion.InsertVariable(False))
                        ElseIf RandomNumber = 1 Then
                            InsertForLoop(File, i)
                        ElseIf RandomNumber = 2 Then
    
                        End If
                    End If
                End If
            Next
        Next
    Next
    

    后:

    Module Main
        Dim WithEvents PlayerReader As New BackgroundWorker
    
        Sub Main()
            Console.ReadLine()
        End Sub
    
        Dim Player As New Player
        Dim Enemy(64) As Enemy
        Private Sub PlayerReader_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles PlayerReader.DoWork
            While True
                Player.GetInformation()
                Player.CheckState()
    
                For i = 0 To 64 - 1
                    Enemy(i).GetInformation(Player, i)
    
                    If Player.Health > 0 Then
                        If Player.Team <> Enemy(i).Team AndAlso Enemy(i).Health > 0 Then
                          Console.WriteLine(Enemy.Name)
                        End If
                    End If
                Next
            End While
        End Sub
    End Module
    

    大胆应该在那里,但斜体不是。另一件事是,如果我只有几个文件或我猜一些特定的文件,它的工作正常。一旦我读完整个解决方案,它就会在错误的地方插入变量。

1 个答案:

答案 0 :(得分:0)

我认为下来的选票是因为问题不明确。您显然已经花了很多精力来解释您的问题,但您描述的大部分内容都是您未共享的自定义类的属性。尝试回答(或者至少阅读并了解你是否理解)其他人的问题,并且应该让你更好地掌握问题何时被清楚传达。

无论如何,即使我认为你的问题源于我们实际上无法看到的代码,但我还是会对导致它的原因产生预感。您之前和之后的建议表明,当您到达所发布的代码段时,StartSub已经True。这可能是由于变量的范围;可能第一个File处理正确,但由于StartSubFor循环之外声明,因此不会为每个新File重新初始化StartSub。您的代码在遇到False行时将End Sub设置为File,但如果之前的StartSub = False错误或错误输入此行,则可能会把你扔掉看看在For i = 0...修复问题之前添加File

另请注意,如果任何End Sub中的行在If之后有一个尾随空格,您将获得意外结果,因为您的代码永远不会测试“End Sub”,因为它已经找到“Sub”在同一行。如果您的自定义类负责这一点,那很好。如果没有,将您的第一个If File.InsertionLoopCode(i) Like "*Sub ?*"语句更改为[Activity(Label = "SampleApp", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity { App mainApp; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); global::Xamarin.Forms.Forms.Init(this, bundle); mainApp = new App(); mainApp.ScreenWidth = (int)Resources.DisplayMetrics.WidthPixels; mainApp.ScreenHeight = (int)Resources.DisplayMetrics.HeightPixels; mainApp.LoadHomePage(); LoadApplication(mainApp); } public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig) { base.OnConfigurationChanged(newConfig); mainApp.ScreenWidth = (int)Resources.DisplayMetrics.WidthPixels; mainApp.ScreenHeight = (int)Resources.DisplayMetrics.HeightPixels; mainApp.LoadHomePage(); } } 会给您带来更安全的结果,因为它会确保在“Sub”一词后面有某种类型的文字。

在Meta说明中,您可能已经意识到格式化代码(粗体/斜体)在已经格式化为代码的文本中不起作用。