草庐IT

static_if

全部标签

c# - C# If语句中条件的执行顺序

下面有两个if语句使用逻辑运算符具有多个条件。逻辑上两者相同,但检查顺序不同。第一个有效,第二个失败。我提到了MSDN用于检查条件的执行顺序是否已定义;但我找不到。考虑以&&作为逻辑运算符的多重检查条件。是否保证它将始终检查第一个条件,如果不满足第二个条件,则不会被检查?我以前使用方法1,效果很好。寻找MSDN引用来证实其使用。更新引用"short-circuit"evaluation代码Listemployees=null;if(employees!=null&&employees.Count>0){stringtheEmployee=employees[0];}if(employe

c# - if(var == true) 是否比 if(var != false) 更快?

很简单的问题。我知道这可能是一个微小的优化,但最终您会使用足够多的if语句来让它发挥作用。编辑:感谢那些提供答案的人。对于那些觉得有必要抨击我的人,要知道好奇心和对知识的渴望不会转化为愚蠢。非常感谢所有提供建设性批评的人。直到现在我才知道陈述if(var)的能力。我很漂亮确定我现在会使用它。;) 最佳答案 首先:回答性能问题的唯一方法是衡量。亲自尝试一下,您就会发现。至于编译器的作用:我提醒你“如果”只是一个条件转移。当你有if(x)Y();elseZ();Q();编译器将其生成为:evaluatexbranchtoLABEL1if

c# - if(var == true) 是否比 if(var != false) 更快?

很简单的问题。我知道这可能是一个微小的优化,但最终您会使用足够多的if语句来让它发挥作用。编辑:感谢那些提供答案的人。对于那些觉得有必要抨击我的人,要知道好奇心和对知识的渴望不会转化为愚蠢。非常感谢所有提供建设性批评的人。直到现在我才知道陈述if(var)的能力。我很漂亮确定我现在会使用它。;) 最佳答案 首先:回答性能问题的唯一方法是衡量。亲自尝试一下,您就会发现。至于编译器的作用:我提醒你“如果”只是一个条件转移。当你有if(x)Y();elseZ();Q();编译器将其生成为:evaluatexbranchtoLABEL1if

c# - C#代码契约(Contract): What can be statically proven and what can't?

我可能会说我对代码契约(Contract)非常熟悉:我已经阅读并理解了大多数usermanual,并且已经使用了一段时间了,但是我仍然有疑问。当我在SO中搜索“未经验证的代码契约(Contract)”时,有很多命中之处,都在问为什么不能静态证明其特定声明。尽管我可以做同样的事情并发布我的特定场景(顺便说一句:),我宁愿理解为什么任何代码契约(Contract)条件都可以被证明或无法被证明。有时我对它可以证明的事情印象深刻,有时我……很好……客气地说:绝对没有留下深刻的印象。如果我想了解这一点,我想知道静态检查器使用的机制。我敢肯定,我会从经验中学习,但是我到处喷洒Contract.As

c# - C#代码契约(Contract): What can be statically proven and what can't?

我可能会说我对代码契约(Contract)非常熟悉:我已经阅读并理解了大多数usermanual,并且已经使用了一段时间了,但是我仍然有疑问。当我在SO中搜索“未经验证的代码契约(Contract)”时,有很多命中之处,都在问为什么不能静态证明其特定声明。尽管我可以做同样的事情并发布我的特定场景(顺便说一句:),我宁愿理解为什么任何代码契约(Contract)条件都可以被证明或无法被证明。有时我对它可以证明的事情印象深刻,有时我……很好……客气地说:绝对没有留下深刻的印象。如果我想了解这一点,我想知道静态检查器使用的机制。我敢肯定,我会从经验中学习,但是我到处喷洒Contract.As

c# - 为什么 C# 编译器不使用动态参数检查调用站点方法的 "staticness"?

为什么C#编译器不告诉我这段代码无效?classProgram{staticvoidMain(string[]args){dynamicd=1;MyMethod(d);}publicvoidMyMethod(inti){Console.WriteLine("int");}}对MyMethod的调用在运行时失败,因为我试图从静态方法调用非静态方法。这是非常合理的,但为什么编译器在编译时不认为这是一个错误呢?下面的不会编译classProgram{staticvoidMain(string[]args){dynamicd=1;MyMethod(d);}}因此尽管是动态分派(dispatch

c# - 为什么 C# 编译器不使用动态参数检查调用站点方法的 "staticness"?

为什么C#编译器不告诉我这段代码无效?classProgram{staticvoidMain(string[]args){dynamicd=1;MyMethod(d);}publicvoidMyMethod(inti){Console.WriteLine("int");}}对MyMethod的调用在运行时失败,因为我试图从静态方法调用非静态方法。这是非常合理的,但为什么编译器在编译时不认为这是一个错误呢?下面的不会编译classProgram{staticvoidMain(string[]args){dynamicd=1;MyMethod(d);}}因此尽管是动态分派(dispatch

c# - 为什么 C# lambda 表达式不能包含一个简单的 if 语句,而不需要大括号?

考虑以下分配给事件的lambda表达式。foo.BarEvent+=(s,e)=>if(e.Value==true)DoSomething();这看起来非常简单,只包含一行代码。那么,为什么我会从调试器中收到以下2个错误?Invalidexpressionterm'if'Onlyassignment,call,increment,decrement,await,andnewobjectexpressionscanbeusedasastatement要解决此问题,您只需将if语句括在方括号中即可。foo.BarEvent+=(s,e)=>{if(e.Value==true)DoSomet

c# - 为什么 C# lambda 表达式不能包含一个简单的 if 语句,而不需要大括号?

考虑以下分配给事件的lambda表达式。foo.BarEvent+=(s,e)=>if(e.Value==true)DoSomething();这看起来非常简单,只包含一行代码。那么,为什么我会从调试器中收到以下2个错误?Invalidexpressionterm'if'Onlyassignment,call,increment,decrement,await,andnewobjectexpressionscanbeusedasastatement要解决此问题,您只需将if语句括在方括号中即可。foo.BarEvent+=(s,e)=>{if(e.Value==true)DoSomet

c# - 如何跳出 IF 语句

我有这样的代码:publicvoidMethod(){if(something){//Somecodeif(something2){//NowIshouldbreakfromifsandgotothecodeoutsideifs}return;}//ThecodeIwanttogoifthesecondifistrue}是否有可能在if之后转到该代码而不使用任何goto语句或将其余代码提取到其他方法?是的,我知道Else;)但是这段代码太长了,应该在第一个IF为假且第一个IF为真时运行,而第二个IF为假。所以提取一个我认为最好的方法。 最佳答案