草庐IT

避免全表扫描

全部标签

c# - 我可以避免对很少更改的变量使用锁吗?

我一直在阅读JoeDuffy关于并发编程的书。我有一个关于无锁线程的学术问题。首先:我知道无锁线程充满了危险(如果你不相信我,请阅读书中关于内存模型的部分)不过,我有一个问题:假设我有一个带有int属性的类。这个属性引用的值会被多个线程非常频繁地读取值发生变化的情况极为罕见,当发生变化时,将由单个线程进行更改。如果它确实发生了变化,而另一个使用它的操作正在运行中,没有人会失去一根手指(任何人使用它所做的第一件事就是将它复制到局部变量)我可以使用锁(或readerwriterlockslim来保持读取并发)。我可以将变量标记为volatile(很多例子都是这样做的)但是,即使是volat

c# - 在 Linq-To-Sql 中避免 "Nullable object must have a value."

我有一个这样的方法查询:publicIListGetBusinessObject(Guid?filterId){using(vardb=newL2SDataContext()){varresult=fromboindb.BusinessObjectswhere(filterId.HasValue)?bo.Filter==filterId.value:trueorderbybo.NameselectSqlModelConverters.ConvertBusinessObject(bo);returnresult.ToList();}}在运行时,这会抛出一个System.InvalidOp

c# - 如何避免两个 Controller 操作之间出现 AmbiguousMatchException?

我有两个名称相同但方法签名不同的Controller操作。它们看起来像这样:////GET:/Stationery/5?asHtml=true[AcceptVerbs(HttpVerbs.Get)]publicContentResultShow(intid,boolasHtml){if(!asHtml)RedirectToAction("Show",id);varresult=Stationery.Load(id);returnContent(result.GetHtml());}////GET:/Stationery/5[AcceptVerbs(HttpVerbs.Get)]publ

c# - 如何避免重复的 try catch block

我有几个看起来像这样的方法:publicvoidfoo(){try{doSomething();}catch(Exceptione){Log.Error(e);}}我可以把代码改成这样吗?[LogException()]publicvoidfoo(){doSomething();}如何实现这个自定义属性?这样做的利弊是什么?-----编辑1------------我可以自己实现吗,我的意思是只写一个类,还是我需要使用postsharp或其他解决方案? 最佳答案 您可以使用委托(delegate)和lambda:privatevoid

c# - 在 C# 中从 XML 解析为 JSON 时如何避免 ROOT 元素

我正在尝试使用JSON.NET从xml创建JSONXmlDocumentdocPerson=newXmlDocument();docPerson.LoadXml(xmlPerson);//xmlPersonisthexmlfromaboveJObjectpersonDefinition=JObject.Parse(JsonConvert.SerializeObject(docPerson));Tasks.personDefinition=personDefinition["personDefinition"];输出JSON"person":{"person":[{"personId":

c# - 可以在此通用代码中避免使用 Delegate.DynamicInvoke 吗?

这个问题部分是关于委托(delegate)的,部分是关于泛型的。给定简化代码:internalsealedclassTypeDispatchProcessor{privatereadonlyDictionary_actionByType=newDictionary();publicvoidRegisterProcedure(Actionaction){_actionByType[typeof(T)]=action;}publicvoidProcessItem(objectitem){Delegateaction;if(_actionByType.TryGetValue(item.Get

c# - 为什么要避免使用 foreach 迭代不可变值类型集合?

在编码标准文档中,我发现了这样的说法:Avoidusingforeachtoiterateoverimmutablevalue-typecollections.E.g.Stringarrays.为什么要避免这种情况? 最佳答案 你不应该回避它。您正在阅读的编码标准文档是在胡说八道。设法找到作者,请他解释。除此之外,string是一个引用类型,而数组总是可变的……老实说,这让我担心文档其余部分的质量。还有其他可疑的建议吗?(“不可变”可能指的是值类型而不是集合-事实上,它是模棱两可的是另一个令人担忧的迹象,IMO。)

c# - 如何避免在 C# 中出现不可能的 bool 状态?

考虑这个函数,您可以将其视为真值表:publicFoodoSomething(boola,boolb){if(a&&b)returndoAB();elseif(a&&!b)returndoA();elseif(!a&&b)returndoB();elseif(!a&&!b)returndoNotANotB();elsethrownewException("Welldone,youdefeatedbooleanlogic!");}编译器坚持最后一个else子句。但从真值表的角度来看,这是不可能的状态。是的,它有效,是的,我可以接受它。但我想知道C#中是否有某种机制可以避免这种代码,或者我

c# - 如何避免使用枚举?

直到询问question在这里我从来没有认为(枚举)是一件“坏事”。对于那些认为它们不是最佳实践的人,有哪些方法/模式可以避免在代码中使用它们?编辑:publicEnumSomeStatusApproved=1Denied=2Pending=3endEnum 最佳答案 Fowler的Refactoring中描述了枚举的问题。,它被认为是代码味道。它与类型安全无关,而是迫使您在整个代码中添加switch语句,从而违反了DRY原则。Statepattern是相同结构的更好模型,因为它允许您在同一类中实现和改变与相同状态相关的逻辑。这也增

c# - 在 app.config 的 configSection 中避免版本特定信息

我制作了一个小型GUI,用于管理app.config文件中的某些设置。GUI作为我的产品的一部分发布,可以更改app.config文件中的值,而无需在文本编辑器中打开它。属性在自定义configSection中实现,使其在代码中具有强类型。我的问题是,当更新app.config文件时(当我从GUI保存时),我的程序集的完全限定名称是这样写在configSection中的:当我将此程序集升级到新版本号时,GUI代码程序集版本不再与app.config中的程序集引用匹配。这是我加载设置的方式:varconfig=ConfigurationManager.OpenMappedExeConfi