草庐IT

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

c# - 如何避免代码中枚举值与数据库中相应值之间的依赖关系?

我有许多用户权限,这些权限在我的ASP.NET应用程序中经过测试。这些权限值在枚举中引用,这样我就可以像这样方便地测试权限:btnCreate.Enabled=PermissionManager.TestPermission(Permission.AllowCreate);但是,我也将这些权限存储在数据库中,因为我需要保存有关它们的更多信息,而不仅仅是它们的ID。但这在枚举值和数据库中的值之间产生了可怕的依赖性,对任何一个的更改都经过深思熟虑,我在整个应用程序中都遇到了问题。有没有更好的方法解决这个问题?以前有人处理过这个问题吗? 最佳答案

c# - 执行大量并发 INSERT 时如何避免 "Violation of UNIQUE KEY constraint"

我正在执行许多并发SQLINSERT语句,这些语句在UNIQUEKEY约束上发生冲突,即使我也在单个事务中检查给定键的现有记录。我正在寻找一种方法来消除或最大限度地减少我遇到的碰撞数量,同时又不会损害性能(太多)。背景:我正在开发一个ASP.NETMVC4WebApi项目,该项目接收大量对INSERT记录的HTTPPOST请求。它每秒收到大约5K-10K请求。该项目的唯一职责是删除重复数据和汇总记录。写起来很重;它的读取请求量相对较小;所有这些都使用带有IsolationLevel.ReadUncommitted的事务。数据库架构这是数据库表:CREATETABLE[MySchema]

c# - 如何利用泛型来填充派生类模型以避免代码重复?

我有2种类型,每种类型都有不同的处理逻辑。基于该处理,我正在准备一个结果并将其返回给消费者(mvc应用程序、控制台应用程序等)类型1类型2现在的问题是一些代码在这两种类型中是通用的。唯一不同的部分是两种类型的类(Type1Manager,Type2Manager)它实际上包含处理type1和type2以及准备结果的逻辑(Type1Model,Type2Model)。publicclassVariant{publicintId{get;set;}publicstringName{get;set;}publicListSubvariants{get;set;}}publicclassSub

c# - 我可以避免存储 MS Exchange 凭据,同时仍然能够进行身份验证(针对 EWS)吗?

我正在构建一个应用程序,用于在用户的ExchangeServer帐户(支持2007-2013版本)和应用程序之间同步数据。应用程序不能使用模拟(至少在典型情况下不能),因为用户可以在任意数量的域和交换服务器上。我知道一开始我将不得不询问他们的用户名/电子邮件地址和密码。但是,如果不需要的话,我真的不想负责存储这些凭据(即使它们是加密的,我也不愿意)。我不确定要问什么问题,所以我要回答这些问题:ExchangeServer如何进行身份验证?用户的凭据是按原样直接发送到服务器,还是在通过网络发送之前一起散列?如果对它们进行哈希处理,我如何获取/生成此哈希值以在后续身份验证中重复使用?Exc

c# - 避免在重建期间删除当前的 Lucene.NET 索引

我是Lucene.NET的新手,但我正在使用anopensourcetool专为SitecoreCMS打造它使用Lucene.NET从CMS中索引大量内容。我昨天确认,当我重建索引时,当前的索引文件会被清除干净,因此依赖索引的任何东西在大约30-60秒(完整索引重建的时间)内都没有数据。是否有最佳实践或方法让Lucene.NET在新索引完全重建之前不覆盖当前索引文件?我基本上认为我希望它写入新的临时索引文件,并且在重建完成后让这些文件覆盖当前索引。我正在谈论的例子:建立新索引(~30秒)索引有大约500个文档使用代码访问索引中的数据并在网站上显示重建索引(~30秒)现在读取数据索引的任

c# - 如何避免使用 async void 事件处理程序重入?

在WPF应用程序中,我有一个通过网络接收消息的类。每当所述类的对象收到一条完整的消息时,就会引发一个事件。在应用程序的主窗口中,我有一个事件处理程序订阅了该事件。保证在应用程序的GUI线程上调用事件处理程序。无论何时调用事件处理程序,都需要将消息的内容应用于模型。这样做可能会非常昂贵(在当前硬件上>200ms)。这就是使用Task.Run将应用消息卸载到线程池的原因。现在,可以非常连续地接收消息,因此可以在仍在处理之前的更改时调用事件处理程序。确保一次只应用一条消息的最简单方法是什么?到目前为止,我已经得出以下结论:usingSystem;usingSystem.Threading.T