草庐IT

c# - 重写继承方法时避免显式类型转换

我有一个基础抽象类,它也实现了一个特定的接口(interface)。publicinterfaceIMovablewhereTEntity:classwhereT:struct{TEntityMove(IMovermoverProvider);}publicabstractclassAnimal:IMovable{...publicvirtualAnimalMove(IMovermoverProvider){//performsmovementusingprovidedmover}}然后我继承了一些类,其中一些类必须重写基类的接口(interface)实现方法。publicclassS

c# - 将方法放入任务中以避免阻塞 asp.net 线程

我想知道以下代码是否有任何我在网络服务器上运行时不知道的陷阱。通读精品系列http://reedcopsey.com/series/parallelism-in-net4/我找不到与我的问题具体相关的任何内容,与msdn一样,所以我想我会把它带到这里。调用示例:publicActionResultIndex(){ViewBag.Message="WelcometoASP.NETMVC!";Task.Factory.StartNew(()=>{//ThisissomelongcompletingtaskthatIdon'tcareabout//Sayloggingtothedatabas

c# - 避免在域模型中使用 JsonIgnore 属性

我有一个包含多个实体类的域模型组件。在另一个组件中,我有使用Json.NET序列化实现的实体存储库。我想在序列化期间忽略一些实体属性,因此直接的解决方案是使用JsonIgnore属性修饰这些属性。但是,出于原则,我想避免在我的域模型中引用其他组件——包括第3方库,如Json.NET。我知道我可以按照描述创建自定义契约(Contract)解析器here但是很难概括在各种实体中什么序列化什么不序列化。通常我想忽略所有只读属性,但也有异常(exception),例如集合:publicListPixels{get{returnthis.Pixels;}}我还可以按照here中的描述为每个实体创

c# - 哪个 C# 模式具有更好的性能来避免重复的事件处理程序?

基本上有两种模式可以避免重复注册事件处理程序:(根据这个讨论:C#patterntopreventaneventhandlerhookedtwice)使用System.Linq命名空间,并通过调用GetInvocationList().Contains(MyEventHandlerMethod);检查事件处理程序是否已注册注册前先注销,如下:MyEvent-=MyEventHandlerMethod;MyEvent+=MyEventHandlerMethod;我的问题是,就性能而言,哪个更好,或者它们之间在性能上有显着差异吗? 最佳答案

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