天道酬勤,学无止境

在 C# 中执行 .. While 循环吗?(Do .. While loop in C#?)

问题

如何在 C# 中编写 Do .. While 循环?

(编辑:我是一名 VB.NET 程序员,正在尝试转向 C#,所以我确实有使用 .NET / VB 语法的经验。谢谢!)

回答1

一般形式为:

do
{
   // Body
} while (condition);

其中conditionbool类型的某种表达式。

就我个人而言,我很少写 do/while 循环 - forforeach和直接while循环在我的经验中更为常见。 后者是:

while (condition)
{
    // body
}

whiledo...while之间的区别在于,在第一种情况下,如果开始时条件为 false,则主体将永远不会被执行 - 而在后一种情况下,它总是在评估条件之前执行一次。

回答2

由于您提到您来自 VB.NET,我强烈建议您查看此链接以显示比较。 您还可以使用此 wensite 将 VB 转换为 C#,反之亦然 - 这样您就可以使用现有的 VB 代码并查看它在 C# 中的样子,包括循环和子项下的任何其他内容。

要回答循环问题,您只需执行以下操作:

while(condition)
{
   DoSomething();
}

你也可以这样做 - 虽然像这样:

do
{
   Something();
}
while(condition);

这是我成功使用的另一个代码翻译器,以及另一个很棒的 C#->VB 比较网站。 祝你好运!

回答3
//remember, do loop will always execute at least once, a while loop may not execute at all
//because the condition is at the top
do
{
  //statements to be repeated
} while (condition);
回答4

令人惊讶的是,没有人提到 do..while 结构的经典示例。 当您想要运行某些代码、检查或验证某些内容(通常取决于该代码执行期间发生的情况)时,Do..while 是一种可行的方法,如果您不喜欢结果,请重新开始。 当您想要一些符合某些约束的用户输入时,这正是您所需要的:

bool CheckInput(string input) { ... }
...
string input;
...
do {
  input=Console.ReadLine();
} while(!CheckInput(input));

这是一种非常通用的形式:当条件足够简单时,通常将它直接放在循环结构上(在“while”关键字之后的方括号内),而不是使用计算它的方法。

这个用法中的关键概念是你必须至少请求用户输入一次(在最好的情况下,用户会在第一次尝试时做对); 并且在主体至少执行一次之前,条件并没有多大意义。 每一个都是很好的提示......虽然是工作的工具,但它们两者一起几乎是一种保证。

回答5

这是一个将打印一些数字的简单示例:

int i = 0;

do {
  Console.WriteLine(++i);
} while (i < 10);
回答6
using System;

class MainClass
{
    public static void Main()
    {
        int i = 0;
        do
        {
            Console.WriteLine("Number is {0}", i);
            i++;
        } while (i < 100);
    }
}

另一种方法是

using System;

class MainClass
{
    public static void Main()
    {
        int i = 0;
        while(i <100)
        {
            Console.WriteLine("Number is {0}", i);
            i++;
        }
    }
}
回答7

Jon Skeet 的答案是正确和伟大的,尽管我想为那些不熟悉 c# 中的whiledo-while人举一个例子:

int i=0;
while(i<10)
{
    Console.WriteLine("Number is {0}", i);
    i++;
}

和:

int i=0;
do
{
    Console.WriteLine("Number is {0}", i);
    i++;
}while(i<10)

都将输出:

Number is 0
Number is 1
Number is 2
Number is 3
Number is 4
Number is 5
Number is 6
Number is 7
Number is 8
Number is 9

正如我们所期望的那样。 然而,重要的是要理解 do-while 循环总是第一次执行主体,而不管检查如何。 这意味着如果我们将 i 的起始值更改为 100,我们将看到非常不同的输出。

int i=100;
while(i<10)
{
    Console.WriteLine("Number is {0}", i);
    i++;
}

和:

int i=100;
do
{
    Console.WriteLine("Number is {0}", i);
    i++;
}while(i<10)

现在 while 循环实际上不产生任何输出:

但是 do-while 循环会生成以下内容:

Number is 100

尽管远远超过 10。这是因为 do-while 循环的独特行为与常规 while 循环不同,它总是运行一次。

回答8

除了 Anthony Pegram 的答案,您还可以使用 while 循环,它会在进入循环之前检查条件

while (someCriteria)
{
    if (someCondition)
    {
        someCriteria = false;
        // or you can use break;
    }
    if (ignoreJustThisIteration)
    {
        continue;
    }
}
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在C#中的循环内使用lock语句(Using lock statement within a loop in C#)
    问题 让我们以示例类SomeThread为例,在该类中,我们试图阻止在Running属性设置为false且OtherThread类调用Dispose之后调用DoSomething方法,因为如果在Dispose方法之后调用它们,世界将随着我们的结束而终止知道。 感觉像是因为循环而有可能发生邪恶的事情。 在它开始下一个循环的时刻以及在调用DoSomething方法之前进行锁定之前,可以将Running更改为false,并在达到锁定之前调用Disposed。 在这种情况下,生活会不好。 我一直在寻找在简单易维护的方法中使用循环时处理此问题的方法。 根据记录,我确实考虑过使用Double Lock Check模式,但是似乎不建议使用C#。 警告:这是一个简化的示例,试图使您可以轻松地关注循环和锁定在其中的问题。 如果我在某个地方不够详细,请告诉我,我会尽力填写任何详细信息。 public class SomeThread : IDisposable { private object locker = new object(); private bool running = false; public bool Running { get { lock(locker) { return running; } } set { lock(locker) { running = value; }
  • 在C#中使用计时器实现循环(Implementing a loop using a timer in C#)
    问题 我想用C#中基于计时器的while循环替换基于计数器的while循环。 例子 : while(count < 100000) { //do something } 至 while(timer < X seconds) { //do something } 对于此System.Timers和Threading.Timers我在C#.NET中有两种类型的计时器。 哪种会更好用,如何使用。我不想增加额外的时间消耗或计时器的线程问题。 回答1 使用这样的构造: Timer r = new System.Timers.Timer(timeout_in_ms); r.Elapsed += new ElapsedEventHandler(timer_Elapsed); r.Enabled = true; running = true; while (running) { // do stuff } r.Enabled = false; void timer_Elapsed(object sender, ElapsedEventArgs e) { running = false; } 不过请注意在UI线程上执行此操作,因为它将阻止输入。 回答2 怎样使用Stopwatch类。 using System.Diagnostics; //... Stopwatch timer = new
  • C#-foreach循环的每次迭代都会调用函数吗? [复制](C# - Does function get called for each iteration of a foreach loop? [duplicate])
    问题 这个问题已经在这里有了答案: 11年前关闭。 可能重复: 遍历函数结果时,foreach如何工作? 如果我具有类似以下的功能-将在foreach循环中为每次迭代调用ReturnParts()还是仅一次调用它? private void PrintParts() { foreach(string part in ReturnParts()) { // Do Something or other. } } private string[] ReturnParts() { // Build up and return an array. } 回答1 它只会被调用一次。 PS多次调用将毫无意义。 如果您希望每次结果都不同,则可以每次重新调用它。 您将如何遍历不断变化的集合? 回答2 您可以通过在函数“ ReturnParts”上放置一个断点来自己确定,如果每次迭代命中了多次,则可以。 回答3 它只会被调用一次。 foreach循环等效于以下代码: IEnumerable<string> enumerator = (collection).GetEnumerator(); try { while (enumerator.MoveNext()) { string part = (string)enumerator.Current; // Do Something or other. }
  • 在C#中的循环中捕获的变量(Captured variable in a loop in C#)
    问题 我遇到了一个有关C#的有趣问题。 我有下面的代码。 List<Func<int>> actions = new List<Func<int>>(); int variable = 0; while (variable < 5) { actions.Add(() => variable * 2); ++ variable; } foreach (var act in actions) { Console.WriteLine(act.Invoke()); } 我希望它输出0、2、4、6、8。但是,它实际上输出5个10s。 看来这是由于所有操作都引用了一个捕获的变量。 结果,当它们被调用时,它们都具有相同的输出。 有没有一种方法可以解决此限制,以使每个操作实例都有其自己的捕获变量? 回答1 是的-在循环内获取变量的副本: while (variable < 5) { int copy = variable; actions.Add(() => copy * 2); ++ variable; } 您可以认为它就像C#编译器每次击中变量声明时都创建一个“新”局部变量一样。 实际上,它将创建适当的新闭包对象,并且如果您在多个作用域中引用变量,它会变得复杂(就实现而言),但是它可以起作用: 请注意,此问题更常见的情况是使用for或foreach : for (int i=0; i < 10
  • 对于(;;)或while(true),哪个是正确的C#无限循环? [关闭](Which is the correct C# infinite loop, for (;;) or while (true)? [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 回到我的C / C ++时代,将“无限循环”编码为 while (true) 感觉更自然,对我而言似乎更明显,而不是 for (;;) 在1980年代后期与PC-lint的相遇以及随后的最佳实践讨论打破了我的这种习惯。 此后,我使用for控制语句对循环进行了编码。 今天,很长一段时间以来的第一次,也许是我作为C#开发人员的第一个无限循环需求,我正面临着同样的情况。 其中一个是正确的,另一个是不正确的吗? 回答1 while(true) { } 一直是我使用过的东西,我见过其他人使用的东西也必须手动中断。 回答2 C#编译器将转换 for(;;) { // ... } 和 while (true) { // ... } 进入 { :label // ... goto label; } 两者的CIL相同。 大多数人发现while(true)更易于阅读和理解。 for(;;)相当晦涩难懂。 资源: 我将.NET Reflector弄得更加混乱,并且在Visual Studio中使用“优化代码”对这两个循环进行了编译。 这两个循环都编译成(使用.NET Reflector): Label_0000: goto Label
  • 如何在 C# 中一次跳出多个循环?(How to break out of multiple loops at once in C#?)
    问题 如果我有嵌套循环,并且我想一次摆脱所有循环怎么办? while (true) { // ... while (shouldCont) { // ... while (shouldGo) { // ... if (timeToStop) { break; // Break out of everything? } } } } 在 PHP 中, break接受一个参数来表示要跳出的循环数。 可以在 C# 中完成这样的事情吗? 像goto这样可怕的东西呢? // In the innermost loop goto BREAK // ... BREAK: break; break; break; 回答1 将嵌套循环提取到一个函数中,然后您可以使用 return 从任何地方退出循环,而不是中断。 回答2 引入另一个控制标志并将其放入所有嵌套的 while 条件中,如下所示。 还用它替换了你拥有的 while(true) 条件 bool keepLooping = true; while (keepLooping) { // ... while (shouldCont && keepLooping) { // ... while (shouldGo && keepLooping) { // ... if (timeToStop) { keepLooping = false; break
  • 有人还在C#中使用[goto]吗?如果是,为什么呢? [关闭](Does anyone still use [goto] in C# and if so why? [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 我想知道是否有人还在C#中使用“ goto”关键字语法,以及这样做的可能原因是什么? 我倾向于将任何导致读者跳过代码的语句视为不良做法,但想知道是否存在使用这种语法的可靠方案? 转到关键字定义 回答1 在某些(很少)情况下,goto可以真正提高可读性。 实际上,您链接到的文档列出了两个示例: goto的常见用法是将控制权转移到特定的切换用例标签或switch语句中的默认标签。 goto语句对于摆脱深层嵌套的循环也很有用。 这是后一个示例: for (...) { for (...) { ... if (something) goto end_of_loop; } } end_of_loop: 当然,还有其他方法可以解决此问题,例如将代码重构为函数,在其周围使用伪块等(有关详细信息,请参见此问题)。 作为附带说明,Java语言设计人员决定完全禁止goto并引入带标签的break语句。 回答2 我记得这部分 switch (a) { case 3: b = 7; // We want to drop through into case 4, but C# doesn't let us case 4: c = 3; break
  • “ while”循环和“ do while”循环之间的区别(Difference between “while” loop and “do while” loop)
    问题 while循环和do while循环有什么区别。 我曾经以为两者完全相同,然后遇到了以下代码段: do { printf("Word length... "); scanf("%d", &wdlen); } while(wdlen<2); 这段代码可以完美地工作。 它打印字长并tascan输入。 但是当我将其更改为 while(wdlen<2){ printf("Word length... "); scanf("%d", &wdlen); } 它给出了一个空白屏幕。 它不起作用。 因此,两个循环之间存在一些功能差异。 有人可以解释吗? 两者之间还有其他区别吗? 回答1 do while循环在检查while的条件之前执行一次循环的内容。 而while循环将在执行内容之前先检查条件。 在这种情况下,您将等待用scanf()进行的用户输入,因为wdlen尚未初始化,因此将永远不会在while循环中执行,而wdlen可能仅包含大于2的垃圾值。 回答2 While :您的条件位于循环块的开始,因此永远不会进入循环。 做时间:您的情况在循环块的末尾,必须至少进入一次循环。 回答3 do { printf("Word length... "); scanf("%d", &wdlen); } while(wdlen<2); do-while循环可确保至少执行一次循环
  • 单击按钮从循环中断-C#(Breaking from a loop with button click - C#)
    问题 我有一个关于使用按钮单击事件循环的问题,在过去的一个小时中,我尝试了许多方法并搜索了许多页面以寻找简单的答案,但事实是每个答案看起来都像外来代码,可能是因为我仍然对开发来说是非常新的。 这是我要做的事情的简化版本: private string Message = "Hello"; private void Spam(bool loop) { if (loop == true) { while (loop == true) { MessageBox.Show(Message); } } else { MessageBox.Show("Spamming has stopped !! "); } } private void button1_Click(object sender, EventArgs e) { Spam(true); } private void button2_Click(object sender, EventArgs e) { Spam(false); } 显然,这不是我的API,或者发明起来毫无用处,但是代码本身很长,你们总是要求“相关代码”(不要轻视),所以就可以了。 我的问题:单击按钮2突破垃圾邮件循环,对我来说,代码看起来不错,API可以确定,但是每次单击按钮1时,API都会冻结。 回答1 使用后台工作者来完成您的工作。 完成后
  • 使用哪个循环,for 还是 do/while?(Which loop to use, for or do/while?)
    问题 当需要计数器时,使用 C#(或 VB.NET)应该使用哪个循环(for 循环或 do/while 循环)? 如果循环应该只迭代设定的次数或通过设定的范围,这有什么不同吗? 场景 A - for 循环 for (int iLoop = 0; iLoop < int.MaxValue; iLoop++) { //Maybe do work here //Test criteria if (Criteria) { //Exit the loop break; } //Maybe do work here } 好处 计数器被声明为循环的一部分易于实现计数器范围 缺点 必须使用 if 离开循环 场景 B - do/while 循环 int iLoop = 0; do { //Increment the counter iLoop++; //Do work here } while (Criteria); 或者 int iLoop = 0; while (Criteria) { //Increment the counter iLoop++; //Do work here } 好处 离开循环是循环结构的一部分选择在循环块之前或之后进行评估 缺点 必须手动管理计数器 回答1 为了完整起见,您还可以使用选项 D: for (int iLoop = 0; Criteria; iLoop++)
  • C#计时器或Thread.Sleep(C# Timer or Thread.Sleep)
    问题 我正在运行Windows服务,并使用循环和Thread.Sleep重复执行任务,使用计时器方法会更好吗? 如果是的话,代码示例将是很棒的 我目前正在使用此代码重复 int curMinute; int lastMinute = DateTime.Now.AddMinutes(-1).Minute; while (condition) { curMinute = DateTime.Now.Minute; if (lastMinute < curMinute) { // do your once-per-minute code here lastMinute = curMinute; } Thread.Sleep(50000); // sleeps for 50 seconds if (error condition that would break you out of this) { break; // leaves looping structure } } 回答1 class Program { static void Main(string[] args) { Timer timer = new Timer(new TimerCallback(TimeCallBack),null,1000,50000); Console.Read(); timer.Dispose()
  • foreach循环在C#中如何工作? [关闭](How do foreach loops work in C#? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 9个月前关闭。 改善这个问题 哪些类型的类可以使用foreach循环? 回答1 实际上,严格来说,您需要使用foreach只是一个公共的GetEnumerator()方法,该方法返回带有bool MoveNext()方法和一个? Current {get;} ? Current {get;}属性。 但是,最常见的含义是“实现IEnumerable / IEnumerable<T>并返回IEnumerator / IEnumerator<T> 。 暗示地,这包括任何实现ICollection / ICollection<T>东西,例如Collection<T> , List<T> ,数组( T[] )等。因此,任何标准的“数据收集”通常都支持foreach 。 为了证明这一点,下面的方法就可以了: using System; class Foo { public int Current { get; private set; } private int step; public bool MoveNext() { if (step >= 5) return false; Current = step++; return true; } }
  • 在C编程中与之相对吗?(For vs. while in C programming?)
    问题 C中有三个循环: for , while和do-while 。 它们之间有什么区别? 例如,似乎几乎所有while语句都可以被for语句代替,对吗? 那么,使用while什么好处? 回答1 while循环将始终首先评估条件。 while (condition) { //gets executed after condition is checked } do / while循环将始终始终先执行do{}块中的代码,然后评估条件。 do { //gets executed at least once } while (condition); for循环使您可以启动计数器变量,检查条件以及一种将计数器全部增加一行的方法。 for (int x = 0; x < 100; x++) { //executed until x >= 100 } 归根结底,它们仍然是循环,但是它们在执行方式方面提供了一定的灵活性。 这是对使用每种不同类型的循环背后的原因的很好的解释,这可能有助于清除问题。 谢谢克莱夫 for和while的主要区别在于实用性:通常在已知迭代次数时使用for , while在事先未知迭代次数时使用while构造。 while vs do ... while问题也是实用程序,第二个在开始时执行一次指令,然后它的行为就像简单的while一样。 For循环特别简洁,因为它们非常简洁
  • 与其他类型的循环相比,编译器会为do-while循环产生更好的代码吗?(Do compilers produce better code for do-while loops versus other types of loops?)
    问题 zlib压缩库中有一条注释(Chromium项目中使用了它),这意味着在大多数编译器中,C语言中的do-while循环会生成“更好的”代码。 这是它所在的代码段。 do { } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && scan < strend); /* The funny "do {}" generates better code on most compilers */ https://code.google.com/p/chromium/codesearch#chromium/src/third_party/zlib/deflate.c&l=1225 是否有证据表明大多数(或任何一种)编译器会生成更好(例如,效率更高)的代码? 更新:原始作者之一马克·阿德勒(Mark Adler)在评论中提供了一些背景信息。 回答1 首先: do-while循环与while -loop或for -loop不同。 while和for循环可能根本不会运行循环主体。 一个do
  • “ while(true)”循环是如此糟糕吗? [关闭](Are “while(true)” loops so bad? [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我已经用Java编程了几年了,但是最近我刚回到学校获得了正式学位。 得知我在上一次作业中因使用如下所示的循环而失去了积分,我感到非常惊讶。 do{ //get some input. //if the input meets my conditions, break; //Otherwise ask again. } while(true) 现在,对于我的测试,我只是在扫描一些控制台输入,但是我被告知不鼓励这种循环,因为使用break类似于goto ,我们只是不这样做。 我完全了解goto及其Java表亲break:label的陷阱,并且我有很好的理由不使用它们。 我还意识到,一个更完整的程序可以提供其他一些逃生方法,例如只是结束程序,但这不是我的教授所引用的原因,所以... do-while(true)什么问题? 回答1 我不会说这很糟糕-但同样地,我通常至少会寻找一个替代方案。 在我写第一件事的情况下,我几乎总是至少尝试将其重构为更清晰的内容。 有时它是无济于事的(或者替代方法是拥有一个bool变量,除了指示循环的结束之外,它没有其他意义
  • “ break”仅适用于“ for”,“ while”,“ do-while”,“ switch”和“ if”语句吗?(Does `break` work only for `for`, `while`, `do-while`, `switch' and for `if` statements?)
    问题 假设我在for循环中有一个if语句: for( ; ; ) { if( ) { printf(" inside if"); break; }//if printf("inside for"); }//for 现在,将break声明会导致编译器出来的for循环还是会只来的排除体外if一旦在条件if得到满足? 回答1 break语句脱离最近的封闭循环或switch语句。 break不会中断if语句,而是包含该if语句的最近的loop或switch 。 不中断if语句的原因是因为它通常用于确定是否要中断loop 。 有趣的是,电话交换机的行为异常,因为发明C的公司恰好犯了这个错误。 他们想打破一个if语句,却忘记了它会脱离整个for语句。 回答2 它将脱离for循环。 break语句仅对循环( do , for , while )和switch语句(用于打破case )有影响。 根据C99标准,第6.8.6.3节: 约束条件中断语句只能出现在开关主体或循环主体中或作为开关主体或循环主体出现。 语义学 break语句终止最小的封闭开关或迭代语句的执行。 回答3 break不会打破if子句,而是最接近的loop或switch子句。 另外,if子句也称为“循环”,因为它从不重复其内容。 回答4 Break语句仅对循环和switch子句有效。 无论如何,它将从最近的封闭循环中出来。
  • C#空语句(C# Empty Statement)
    问题 C#语言规范定义了空语句语法的产生方式,这使我可以执行以下操作: static void Main(string[] args) { ; ; ; } 微软为什么要在C#语言中包含这种语法生成方式? 它有有用的目的吗? 回答1 while (GetWhitespace(textStream)) ; 回答2 我个人绝不会使用空语句。 如果我出于某种奇怪的原因想打高尔夫,写一些类似的东西, while(Foo(x++)) ; 我更倾向于使用{}代替; 作为“不做任何声明”。 我认为这更加清楚。 出于历史原因,它的存在几乎是存在的。 {}没有什么是您不能做的。 更新:我只是想到了一个可能的用例。 在调试版本中,它允许您将断点放置在可以保证断点的位置,该断点不会在您步进时产生任何副作用。 如果断点周围的代码特别复杂,则可能会很有用。 更新更新:我错了错错了。 那不行它只是将断点移至下一条语句。 真讨厌 回答3 这有两个用途: while(DoSomething()) ; 和 void M() { if(someCondition) goto exit; // ... exit: ; } 还有很多。 无需执行任何操作,但需要声明,这是一个有用的设备。 回答4 C#从C家族继承了很多东西,您可以在其中做类似的事情 for (i = 0; i < n; v[i++] = 1); 或者
  • C中while循环中的逗号分隔表达式(comma separated expression in while loop in C)
    问题 我从来没有见过这样一个while语句之前。 while(printf("> "), fgets(str, 100, stdin), !feof(stdin)) { .. .. } 我在网上阅读,while循环中出现的条件是最右边的条件[!feof(stdin)]。 那么,以上while语句的用途是什么 while(!feof(stdin)) { printf("> "); fgets(str, 100, stdin); ... ... } 另外,虽然while语句采用表达式,所以1,1,1在C语言中是有效的表达式吗? 回答1 给定的两个循环没有相同的含义。 通过以这种方式使用逗号运算符,即使从未输入循环本身,作者也可以指定应在每次迭代中执行的代码。 它更像是do ... while ()循环或类似以下内容的代码: printf("> "); fgets(str, 100, stdin); while(!feof(stdin)) { .. .. printf("> "); fgets(str, 100, stdin); } 回答2 最好将逗号运算符视为运算符。 就像+是一个运算符,使得2 + 3是一个表达式(恰好导致的值5 ),所以太,是操作者,因此0, 1是有效的表达式(恰好导致值1 ,因为那是最后一个操作数)。 回答3 您建议的修改不相等。 这是: while (1) {
  • C# 循环语句:while,for,foreach,do while,break,continue,嵌套循环,无限循环(学习心得 10)
    满足一定条件下,多次执行同一块代码。 超级小白友好,讲解C#基础,每集5分钟轻松学习,拒绝从入门到放弃! 超级小白友好,讲解C#基础,每集5分钟轻松学习,拒绝从入门到放弃! 一、循环类型 1.1 while 循环 语法: while(condition) { statement(s); } condition 可以是任意的表达式,当为任意非零值时都为真。 例: using System; namespace Loops { class Program { static void Main(string[] args) { /* 局部变量定义 */ int a = 10; /* while 循环执行 */ while (a < 12) { Console.WriteLine("a 的值: {0}", a); a++; } Console.ReadLine(); } } } 运行结果: a 的值: 10 a 的值: 11 1.2 for/foreach 循环 语法: for ( init; condition; increment ) { statement(s); } 例: using System; namespace Loops { class Program { static void Main(string[] args) { /* for 循环执行 */ for (int
  • C# 线程真的可以缓存一个值并忽略其他线程上对该值的更改吗?(Can a C# thread really cache a value and ignore changes to that value on other threads?)
    问题 这个问题是不是关于种族条件,原子,或为什么你应该在你的代码中使用的锁。 我已经知道这些了。 更新:我的问题不是“是否存在易失性内存的怪异性”(我知道确实存在),我的问题是“.NET 运行时不会将其抽象化,因此您永远不会看到它”。 请参阅 http://www.yoda.arachsys.com/csharp/threads/volatility.shtml 和字符串属性本身线程安全的第一个答案? (它们实际上是同一篇文章,因为一个引用另一个。)一个线程设置一个 bool,另一个线程循环永远读取该 bool —— 这些文章声称读取线程可能缓存旧值而从不读取新值,所以因此您需要一个锁(或使用 volatile 关键字)。 他们声称以下代码可能会永远循环。 现在我同意锁定变量是一种很好的做法,但我不敢相信 .NET 运行时真的会忽略文章声称的内存值变化。 我理解他们关于易失性内存与非易失性内存的讨论,并且我同意他们在非托管代码中有一个有效的观点,但我无法相信 .NET 运行时不会正确地将其抽象出来,因此以下代码确实如此你期望什么。 这篇文章甚至承认代码“几乎肯定”会起作用(虽然不能保证),所以我在索赔上打电话给 BS。 任何人都可以验证以下代码并不总是有效吗? 有没有人能够得到一个失败的案例(也许你不能总是重现它)? class BackgroundTaskDemo {