在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → 如何通过表达式树生成可读的C#代码

如何通过表达式树生成可读的C#代码

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.11M
  • 下载次数:0
  • 浏览次数:8
  • 发布时间:2024-03-25
  • 实例类别:一般编程问题
  • 发 布 人:chenxiaolan
  • 文件格式:.zip
  • 所需积分:2
 

实例介绍

【实例简介】
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

标签:

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警