我正在开展一个项目,在那里我将VB.net解决方案代码文件读入List(Of File)
(文件是自定义类),然后循环遍历Code
(代码为{ {1}})每个文件的属性。
我想在该循环中做的是添加随机代码,但我在确定如何使其正常工作时遇到了一些麻烦。
问题是代码插入了我不希望插入的地方。
我尝试了几种不同的方法:
只需循环遍历Code属性并在条件合适时添加行。
添加另一个属性:List(Of String)
,然后循环遍历并使用新属性值将行插入代码属性。
添加另一个属性:Public Indices As List(Of Integer)
,为其分配Code属性,然后循环遍历新属性并向Code属性添加行
代码是什么样的:
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
大胆应该在那里,但斜体不是。另一件事是,如果我只有几个文件或我猜一些特定的文件,它的工作正常。一旦我读完整个解决方案,它就会在错误的地方插入变量。
答案 0 :(得分:0)
我认为下来的选票是因为问题不明确。您显然已经花了很多精力来解释您的问题,但您描述的大部分内容都是您未共享的自定义类的属性。尝试回答(或者至少阅读并了解你是否理解)其他人的问题,并且应该让你更好地掌握问题何时被清楚传达。
无论如何,即使我认为你的问题源于我们实际上无法看到的代码,但我还是会对导致它的原因产生预感。您之前和之后的建议表明,当您到达所发布的代码段时,StartSub
已经True
。这可能是由于变量的范围;可能第一个File
处理正确,但由于StartSub
在For
循环之外声明,因此不会为每个新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说明中,您可能已经意识到格式化代码(粗体/斜体)在已经格式化为代码的文本中不起作用。