Tag: 循环

有一个空的while循环有什么影响?

我知道这可能是一个’愚蠢’的问题,但有时,我只想循环直到条件为假,但我不喜欢保持循环为空。 所以代替 : Visible = true; while(IsRunning) { } Visible = false; 我通常喜欢 : while(IsRunning) { Visible = true; } Visible = false; 但是,我有点担心在Visible = true;行中究竟发生了什么Visible = true; 。 运行时是否继续执行该语句,即使它是多余的 ? 这样做甚至可取吗? 许多“代码增强”插件不喜欢空的while循环,我真的不明白为什么。 所以: 有一个空的while循环有什么问题吗? 如上所示的循环是否有任何性能影响? 谢谢!

高频率地创建类的短期新实例是否效率低下?

我有一个C#程序跟踪玩家在游戏中的位置。 在这个程序中,我有一个名为Waypoint(X,Y,Z)的类,它代表游戏地图上的一个位置。 在我产生的其中一个线程中,我一直在检查玩家与某个目标Waypoint的距离,在while(true)循环中相互之后非常快。 在Waypoint类中有一个名为public double Distance(Waypoint wp)的方法,它计算从当前航点到作为参数传递的航点的距离。 问题:每次我想检查玩家到目标航路点的距离时,是否可以为玩家的位置创建一个新的Waypoint? 然后程序可能会在一段时间(真实)循环中反复创建此玩家Waypoint,仅用于计算距离。 PS:我的程序可能需要巧妙地使用资源,因为它运行多个线程,连续的while循环执行各种工作,例如将玩家的X,Y,Z位置发布到UI。 非常感谢!

如何使用按钮停止for循环?

我有一个循环,我想停止使用按钮。 编辑以便更好地理解: 我确实意识到在循环运行时你无法停止按钮,因为只要当前的UI正在运行它就无法工作。 我真正要求的是创建线程或使用BGWorker来阻止它的最有效方法。 我见过一些方法,但大多数方法都是针对Java而不是C#。 我想做的是: private void start_Click(object sender, EventArgs e) { for(int i = 0; i < nums; i++) { doSomething(); } } private void stop_Click(object sender, EventArgs e) { stops start_Click() }

C# – 两个大字符串数组的模糊比较

我需要在B中找到“部分”存在于A中的所有字符串。 B = [ “Hello World!”, “Hello Stack Overflow!”, “Foo Bar!”, “Food is nice…”, “Hej” ] A = [ “World”, “Foo” ] C = B.FuzzyCompare(A) // C = [ “Hello World!”, “Foo Bar!”, “Food is nice…” ] 我一直在研究使用Levenshtein Distance Algorithm来解决问题的“模糊”部分,以及迭代的LINQ 。 但是,A * B通常会导致超过15亿次比较。 我该怎么办呢? 有没有办法快速“几乎比较”两个字符串列表?

C#,For循环和速度测试……第二次完全相同的循环更快?

public Int64 ReturnDifferenceA() { User[] arrayList; Int64 firstTicks; IList userList; Int64 secondTicks; System.Diagnostics.Stopwatch watch; userList = Enumerable .Range(0, 1000) .Select(currentItem => new User()).ToList(); arrayList = userList.ToArray(); watch = new Stopwatch(); watch.Start(); for (Int32 loopCounter = 0; loopCounter < arrayList.Count(); loopCounter++) { DoThings(arrayList[loopCounter]); } watch.Stop(); firstTicks = watch.ElapsedTicks; watch.Reset(); watch.Start(); for (Int32 loopCounter = 0; loopCounter […]

是否有更快的方式来循环数千个项目?

假设我有一个包含100,000个字节的字节数组。 我想将每个字节转换为其自身的文本表示。 例如: byte[] b = new byte[55000]; for(int i = 0; i < b.Length; i++) { Console.WriteLine(ConvertToString(b[i])); } 上面的代码需要大约35秒才能完成,有什么方法可以将其减少到大约5秒钟吗?

在foreach循环内手动增加枚举数

我在foreach循环中有一个嵌套的while循环,我希望在满足某个条件时无限期地推进枚举器。 为此,我尝试将枚举器转换为IEnumerator (如果它在foreach循环中必须是这样)然后在已转换对象上调用MoveNext(),但它给出了一个错误,说我无法转换它。 无法通过引用转换,装箱转换,取消装箱转换,包装转换或空类型转换将类型“System.DateTime”转换为System.Collections.Generic.IEnumerator。 foreach (DateTime time in times) { while (condition) { // perform action // move to next item (time as IEnumerator).MoveNext(); // will not let me do this } // code to execute after while condition is met } 在foreach循环中手动增加IEnumerator的最佳方法是什么? 编辑:编辑显示有一个条件满足后我想要执行的w​​hile循环之后的代码这就是为什么我想在内部手动递增然后突破它而不是继续这会让我回到顶部。 如果这是不可能的,我相信最好的事情就是重新设计我是如何做到的。

“For”循环增量无法正常工作。 为什么?

for (float i = -1; i <= 1; i+=0.1f) { Console.WriteLine(i); } 这是结果 -1 -0.9 -0.8 -0.6999999 -0.5999999 -0.4999999 -0.3999999 -0.2999999 -0.1999999 -0.09999993 7.450581E-08 0.1000001 0.2000001 0.3000001 0.4000001 0.5000001 0.6000001 0.7000001 0.8000001 0.9000002

在“for”循环中添加委托更改迭代的方法 – C#问题?

我遇到了C#代码的一些问题。 添加方法以“for”循环委托“i”加1,所以“for(int i = 0,i <x; i ++)”必须更改为“for(int i = -1,i <x- 1; i ++)“正常工作。 这是为什么? 下面的代码抛出IndexOutOfRangeException string[] names = new string[] { “John”, “Madeline”, “Jack”, “Gabby” }; Action showNameDelegate = null; for (int i = 0; i global::System.Console.WriteLine(names[i]); } foreach (Action showName in showNameDelegate.GetInvocationList()) { showName(); } 正确的代码是(查看迭代器“i”,它从-1开始,但“names [-1]”不存在): string[] names = new string[] […]

C#浮动无限循环

C#(。Net 3.5 SP1)中的以下代码是我机器上的无限循环: for (float i = 0; i < float.MaxValue; i++) ; 它达到了16777216.0和16777216.0 + 1的评估值为16777216.0。 但在这一点上:我+ 1!=我。 这是一些疯狂。 我意识到浮点数的存储方式存在一些不准确之处。 而且我已经读过整数大于2 ^ 24但不能正确存储为浮点数。 上面的代码仍然应该在C#中有效,即使数字无法正确表示。 为什么不起作用? 你可以在double中获得同样的效果,但这需要很长时间。 9007199254740992.0是double的限制。