草庐IT

while语句

全部标签

c# - 短路语句评估——这有保证吗? [C#]

这里是关于C#中的短路语句的快速问题。使用这样的if语句:if(MyObject.MyArray.Count==0||MyObject.MyArray[0].SomeValue==0){//....}如果“MyArray.Count”部分为真,是否保证评估会在该部分之后停止?否则我会在第二部分得到一个空异常。 最佳答案 是的,这是有保证的。C#LanguageSpecification-7.11Conditionallogicaloperators:The&&and||operatorsarecalledtheconditional

C#:嵌套条件与 continue 语句

最近在使用ReSharper时,它建议我通过反转if条件并使用continue语句来减少某些地方的嵌套。嵌套条件:foreach(....){if(SomeCondition){//dosomethingsif(SomeOtherNestedCondition){//dosomefurtherthings}}}继续声明:foreach(....){if(!SomeCondition)continue;//dosomethingsif(!SomeOtherNestedCondition)continue;//dosomefurtherthings}我理解您为什么要为性能和内存问题减少嵌套

c# - 为什么调试器的断点条件允许赋值语句作为 bool 条件?

这非常危险,所以我想知道为什么允许这样做。由于我经常需要在VB.NET和C#之间切换,我有时会添加如下断点条件:foo="bah"如果string变量foo是"bah,我想停止,所以正确的方法是使用foo=="bah"而不是foo="bah"。但它“有效”。您不会在编译或运行时收到任何警告或错误。但实际上这修改变量foo,即使它有不同的值,它也总是"bah"。由于这种情况悄无声息地发生(断点永远不会命中),因此非常危险。为什么允许?我的推理错误在哪里(除了混淆C#和VB.NET语法之外)?在C#中(相对于VB.NET)一个assignmentstatement返回分配的值,因此在本例中

c# - 我如何在类型安全的枚举模式上使用 switch 语句

我以不同的方式找到了一个关于实现枚举的漂亮示例。我认为这就是所谓的类型安全枚举模式。我开始使用它,但我意识到我不能在switch语句中使用它。我的实现如下所示:publicsealedclassMyState{privatereadonlystringm_Name;privatereadonlyintm_Value;publicstaticreadonlyMyStatePASSED=newMyState(1,"OK");publicstaticreadonlyMyStateFAILED=newMyState(2,"ERROR");privateMyState(intvalue,stri

c# - 嵌套的 if 语句混淆了 Razor

我正在尝试设置从数据表中提取的下拉菜单。这适用于第一级菜单。工作代码:@foreach(System.Data.DataRowdrinmenu.Rows){if(Level1!=dr["Level1"].ToString()){@dr["Level1"].ToString()Level1=@dr["Level1"].ToString();}}当我尝试添加嵌套的if语句时出现问题。如果将此代码放入VisualStudio,您会注意到Razor无法识别@foreach循环的右括号。代码中断:@foreach(System.Data.DataRowdrinmenu.Rows){if(Leve

c# - EF 代码首先是 : How to delete a row from an entity's Collection while following DDD?

场景是这样的:DDD声明您使用存储库获取聚合根,然后使用它来添加/删除它拥有的任何集合。添加很简单,您只需在要添加到的Collection上调用.Add(Itemitem)。保存时会向数据库中添加一个新行。但是,删除是不同的-调用.Remove(Itemitem)不会从数据库中删除项目,它只是删除外键。因此,是的,从技术上讲,它不再是收藏的一部分,但它仍在数据库中。仔细阅读,唯一的解决方案是使用数据上下文将其删除。但是根据DDD,域对象不应该知道数据上下文,因此必须在域外进行删除。解决这个问题的正确方法是什么?或者让数据库中充满孤儿是可以接受的吗(也许运行一个例程来清除它们)?

c# - 将 TryDequeue 放在 while 循环中是否安全?

我以前没有用过并发队列。是否可以在while循环中使用如下所示的TryDequeue?这能不卡死吗?varcq=newConcurrentQueue();cq.Enqueue("test");stringretValue;while(!cq.TryDequeue(outretValue)){//Maybesleep?}//Dorestofcode 最佳答案 从某种意义上说,循环实际上不会结束,直到有一个项目被取出,并且如果队列有一个项目要取出,它最终会结束,这是安全的。如果队列被另一个线程清空并且不再添加任何项目,那么循环当然不会结

c# - 如何在powershell中实现using语句?

如何在powershell中编写using?这是C#中的工作示例using(varconn=newSqlConnection(connString)){Console.WriteLine("InUsing");}我在Powershell中需要同样的东西(不工作):Using-Object($conn=New-ObjectSystem.Data.SqlClient.SqlConnection($connString)){Write-Warning-Message'InUsing';}它在不使用的情况下工作:$conn=New-ObjectSystem.Data.SqlClient.Sql

c# - 使用语句和添加引用有什么区别?

在VisualStudio中,什么时候必须添加对dll的引用?我总是尽量在我的项目中使用最少的引用资料,我尽量只包含真正必要的引用资料。如果我的源代码中有using语句,我会认为我只需要一个引用。但这还不够。例如,我有一个非常简单的程序,它使用System和Microsoft.Practices.EnterpriseLibrary.Data:usingSystem;usingMicrosoft.Practices.EnterpriseLibrary.Data;publicclassSimpleConnection{privatestaticvoidMain(){vardatabase=

C# - 为什么我不能将在 using 语句中声明的类作为引用类型传递?

假设我有以下一次性类和示例代码来运行它:publicclassDisposableInt:IDisposable{privateint?_Value;publicint?MyInt{get{return_Value;}set{_Value=value;}}publicDisposableInt(intInitialValue){_Value=InitialValue;}publicvoidDispose(){_Value=null;}}publicclassTestAnInt{privatevoidAddOne(refDisposableIntIntVal){IntVal.MyInt+