实例介绍
ExpressionToCode是一个能够将表达式树转换成有效且可读C#代码的工具,非常适合.NET开发者进行代码调试和单元测试。通过提供类似Groovy的强大断言功能,它能够在断言失败时显示出错表达式的代码及其子表达式的值,从而使得问题的定位更为准确。
例如,当你执行以下断言失败的测试:
PAssert.That(() => Enumerable.Range(0,1000).ToDictionary(i=>"n"+i)["n3"].ToString()==(3.5).ToString());
你会得到一个包含失败原因的详细信息,帮助你快速定位问题所在。ExpressionToCode支持静态字段和属性访问,识别C#索引器使用,添加必要的括号以符合操作符优先级和结合性,生成有效的数字和其他常量字面量,支持C#语法糖等特性,使得生成的代码既准确又易于理解。
此外,ExpressionToCode还提供了灵活的配置选项,允许开发者根据需要自定义代码生成和断言的行为,使其更加符合实际项目的需求。无论是在进行单元测试还是需要直观展示代码执行结果时,ExpressionToCode都是.NET开发者的有力工具。
【实例截图】
【核心代码】
文件清单
└── ExpressionToCode-b2eb458570d3199a9ada0366453eaf831f525c37
├── ExpressionToCode.Benchmarks
│ ├── ExpressionToCode.Benchmarks.csproj
│ └── Program.cs
├── ExpressionToCodeLib
│ ├── CodeAnnotators.cs
│ ├── ExpressionExpectations.cs
│ ├── ExpressionToCodeConfiguration.cs
│ ├── ExpressionToCode.cs
│ ├── ExpressionToCodeLib.csproj
│ ├── ExpressionTreeAssertion.cs
│ ├── ExpressionTreeCompilers.cs
│ ├── FormatStringParser.cs
│ ├── GlobalUsings.cs
│ ├── Internal
│ │ ├── DotnetExpressionCompiler.cs
│ │ ├── EqualityExpressions.cs
│ │ ├── ExpressionPrecedence.cs
│ │ ├── ExpressionToCodeImpl.cs
│ │ ├── ExpressionToCodeString.cs
│ │ ├── ExpressionTypeDispatch.Generated.cs
│ │ ├── ExpressionTypeDispatch.tt
│ │ ├── FastExpressionCompilerImpl.cs
│ │ ├── NullabilityHelpers.cs
│ │ ├── ObjectStringifyImpl.cs
│ │ ├── ObjectToCodeImpl.cs
│ │ ├── ReflectionHelpers.cs
│ │ ├── StringifiedExpression.cs
│ │ ├── SubExpressionPerLineCodeAnnotator.cs
│ │ ├── TypeToCodeConfig.cs
│ │ └── ValuesOnStalksCodeAnnotator.cs
│ ├── IObjectStringifier.cs
│ ├── ObjectStringify.cs
│ ├── ObjectToCode.cs
│ └── PAssert.cs
├── ExpressionToCode.lutconfig
├── ExpressionToCode.sln
├── ExpressionToCode.sln.DotSettings
├── ExpressionToCodeTest
│ ├── AnnotatedToCodeTest.cs
│ ├── AnonymousObjectFormattingTest.AnonymousObjectsInArrayExpression.approved.txt
│ ├── AnonymousObjectFormattingTest.cs
│ ├── AnonymousObjectFormattingTest.MessyEnumerablesOfAnonymousObjects.approved.txt
│ ├── ApiStabilityTest.cs
│ ├── ApiStabilityTest.PublicApi.approved.txt
│ ├── ApiStabilityTest.UnstableApi.approved.txt
│ ├── ApprovalTest.cs
│ ├── ArrayAccessTests.cs
│ ├── BlockExpressionTest.cs
│ ├── CSharpFriendlyTypeNameTest.cs
│ ├── EnumerableFormattingTest.cs
│ ├── EnumerableFormattingTest.NestedArraysUseProperConfig.approved.txt
│ ├── EnumTests.cs
│ ├── EqualityComparingTest.cs
│ ├── ExceptionsSerialization.cs
│ ├── ExpressionInterpretationBug.cs
│ ├── ExpressionToCodeLibTest.cs
│ ├── ExpressionToCodeTest.csproj
│ ├── ExpressionWithNameTest.cs
│ ├── GenericsTestClasses.cs
│ ├── GlobalUsings.cs
│ ├── ImplicitCastingTest.cs
│ ├── JunkClassesForTesting.cs
│ ├── MultipleIndexerTest.cs
│ ├── NestedClassTest.cs
│ ├── packages.config
│ ├── PAssertTest.cs
│ ├── StringInterpolationTest.cs
│ ├── SubExpressionPerLineCodeAnnotatorTest.A_plus_B_approved.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.Binary_expressions_with_nesting.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.cs
│ ├── SubExpressionPerLineCodeAnnotatorTest.DealsOkWithEnumerablesOfAnonymousObjects.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.DealsOkWithLongEnumerables.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.DealsOkWithLongStrings.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.DealsOkWithObjectsContainingLongMultilineStrings.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.DealsOkWithObjectsContainingLongStrings.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.MessyStructureElidesNeatly.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.MethodCallsAndArrayLiterals.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.NestedArrayAccess.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.NestedArrayAccessWithOuterAnd.approved.txt
│ ├── SubExpressionPerLineCodeAnnotatorTest.NodesThatAreUndescribableAreNotDescribed.approved.txt
│ ├── SubExprExceptionTest.cs
│ ├── TopLevelProgramTest.cs
│ ├── ToValuedCodeTest.cs
│ ├── ValueOnStalksAnnotatorTest.A_plus_B_approved.approved.txt
│ ├── ValueOnStalksAnnotatorTest.Binary_expressions_with_nesting.approved.txt
│ ├── ValueOnStalksAnnotatorTest.cs
│ ├── ValueOnStalksAnnotatorTest.DealsOkWithEnumerablesOfAnonymousObjects.approved.txt
│ ├── ValueOnStalksAnnotatorTest.DealsOkWithLongEnumerables.approved.txt
│ ├── ValueOnStalksAnnotatorTest.DealsOkWithLongStrings.approved.txt
│ ├── ValueOnStalksAnnotatorTest.DealsOkWithObjectsContainingLongMultilineStrings.approved.txt
│ ├── ValueOnStalksAnnotatorTest.DealsOkWithObjectsContainingLongStrings.approved.txt
│ ├── ValueOnStalksAnnotatorTest.MessyStructureElidesNeatly.approved.txt
│ ├── ValueOnStalksAnnotatorTest.MethodCallsAndArrayLiterals.approved.txt
│ ├── ValueOnStalksAnnotatorTest.NestedArrayAccess.approved.txt
│ ├── ValueOnStalksAnnotatorTest.NestedArrayAccessWithOuterAnd.approved.txt
│ ├── ValueOnStalksAnnotatorTest.NodesThatAreUndescribableAreNotDescribed.approved.txt
│ └── ValueTupleTests.cs
├── how-to-push-to-nuget.txt
├── LICENSE
├── README.md
└── TopLevelProgramExample
├── TopLevelProgram.cs
├── TopLevelProgramExample.csproj
└── TopLevelProgramMarker.cs
6 directories, 99 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论