草庐IT

c# - 契约前置条件引起的IEnumerable多重枚举

我有一个IEnumerable参数,该参数必须是非空的。如果有像下面这样的先决条件,那么集合将在它期间被枚举。但是下次我引用它时它会再次被枚举,从而导致在Resharper中出现“PossiblemultipleenumerationofIEnumerable”的警告。voidProcessOrders(IEnumerableorderIds){Contract.Requires((orderIds!=null)&&orderIds.Any());//enumeratesthecollection//BAD:collectionenumeratedagainforeach(variin

c# - Visual Studio Express 2013 中的代码契约(Contract)支持

我一直在VisualStudioExpress2013中开发C#项目并遇到了CodeContracts对于.NET语言。它们的简洁和附带的静态分析工具给我留下了深刻的印象,我开始在我的代码库中使用它们。然而,当我试图运行我的程序时,我遇到了一条类似于thisSOthread中的错误消息。,即...Anassembly(probably"")mustberewrittenusingthecodecontractsbinaryrewriter(CCRewrite)becauseitiscallingContract.RequiresandtheCONTRACTS_FULLsymbolisd

c# - 数据契约(Contract)序列化器可以用于任何第三方网络服务吗

我有一个大型的第三方网络服务;reference.cs是33MB。使用VisualStudio2017,代理使用XMLSerializer,这会在创建channel时造成5秒的延迟。我在Microsoft开了一个案例,他们部分地向我展示了如何修改reference.cs以使用Datacontract序列化程序。在同一台机器上,channel创建时间为20毫秒,这完全符合我的需求。不幸的是,消息因细微差别而失败,Microsoft支持人员无法提供帮助。有已知的限制吗?我应该寻找任何模式来确定它根本不起作用,我应该开始使用HTTP请求重写所有内容吗?导致整体延迟的实际方法:publicXm

c# - 代码契约(Contract) : Why are some invariants not considered outside the class?

考虑这个不可变类型:publicclassSettings{publicstringPath{get;privateset;}[ContractInvariantMethod]privatevoidObjectInvariants(){Contract.Invariant(Path!=null);}publicSettings(stringpath){Contract.Requires(path!=null);Path=path;}}这里需要注意两点:有一个保证Path属性永远不会为null的契约不变量构造函数检查path参数值以遵守先前的契约不变量此时,Setting实例永远不能有n

c# - 代码契约(Contract)不能反转条件?

我有这个结构(为简洁起见简化):publicstructPeriod{publicPeriod(DateTime?start,DateTime?end):this(){if(end.HasValue&&start.HasValue&&end.Value但是静态检查器给了我这个警告:CodeContracts:requiresunproven:end.HasValue&&start.HasValue&&end.Value>=start.Value它从自定义参数验证中推断出的这个要求完全是错误的。我想为start允许空值或end,并且只需要start如果两者都提供。但是,如果我将构造函数更

c# - 代码契约-ForAll-静态验证支持什么

Contract.ForAll的静态检查有很多信息只有有限的支持或没有支持。我做了很多实验,发现它可以用于:Contract.ForAll(items,i=>i!=null)Contract.ForAll(items,p)其中p类型为Predicate它不能用于:实地考察属性(property)访问权方法组(反正我觉得delegate是分配在这里的)实例方法调用我的问题是:还有哪些其他类型的代码ForAll可以一起工作吗?代码契约(Contract)是否在Contract.ForAll(items,i=>i!=null)之后promise已证明,当稍后在代码中从列表中取出一项时(即通过

c# - 我可以将契约(Contract)留在代码中,以便与非代码契约(Contract)开发人员使用的代码库合并吗?

在过去的几个月里,我一直在为我的公司开发一个副项目,但现在上级决定它非常适合现有产品。我一直在使用Microsoft的CodeContracts开发用于静态类型检查的辅助项目(部分原因是我以前没有使用过它们并且渴望学习)。我的问题是,如果我将我的代码checkin到代码库中并使用Contracts,是否所有其他开发人员都需要安装CodeContracts工具才能继续开发?我知道他们都没有安装它,而且我是这里的初级人员,所以我怀疑我能否说服他们所有人都安装它。我使用的是.Net4.5,因此包含了代码契约库,但我想知道VisualStudio是否会提示它们没有使用CONTRACTS_FUL

c# - 自动实现属性的代码契约(Contract)

有什么方法可以在.NET中将契约放在自动实现的属性上吗?(如果答案是"is"怎么办)?(我假设使用来自DevLabs的.NET代码契约(Contract)) 最佳答案 是的,这是可能的-所需要的只是将您的契约(Contract)条件添加到类中的[ContractInvariantMethod]方法中,然后添加等效的Requires前提条件到自动setter,并将后置条件Ensures添加到get。来自Reference的第2.3.1节Astheexampleillustrates,invariantsonauto-propertie

c# - 代码契约(Contract)的好处

我为什么要使用像这样的代码契约Contract.Requires(x!=null,"x");而不是旧的if(x!=null){}elsethrow...除了简洁还有其他好处吗? 最佳答案 根据MSDN:Thebenefitsofcodecontractsincludethefollowing:Improvedtesting:Codecontractsprovidestaticcontractverification,runtimechecking,anddocumentationgeneration.Automatictesting

c# - 确保 IEnumerable 不为空的契约(Contract)

给定的代码staticpublicintQ(){returnEnumerable.Range(0,100).Select(i=>i).First();}发出以下警告:warning:CodeContracts:requiresunproven:Any(source)如果我删除.Select()子句,它就会消失。但我不清楚我到底需要什么.Ensure才能满足cccheck。 最佳答案 你能用这段代码避免警告吗?varres=Enumerable.Range(0,100).Select(i=>i).Take(1);//executeon