我正在尝试使用
LinqPad运行片段的Roslyn代码生成功能. LinqPad的.Dump()扩展方法将对象的格式化视图呈现到“结果”窗格.
由http://roslynquoter.azurewebsites.net/生成的代码包含许多代码,除了添加膨胀之外似乎没有做太多其他代码.以下代码输出返回null; .WithFooToken(…)调用是否被注释掉.
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; var syn = SyntaxFactory.ReturnStatement( SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression) // .WithToken(SyntaxFactory.Token(SyntaxKind.NullKeyword)) ) // .WithReturnKeyword( // SyntaxFactory.Token(SyntaxKind.ReturnKeyword) // ) // .WithSemicolonToken( // SyntaxFactory.Token(SyntaxKind.SemicolonToken) // ) ; syn.NormalizeWhitespace().ToFullString().Dump();
解决方法
是的,在简单的情况下,这些调用是没有必要的.
The code of RoslynQuoter有RemoveRedundantModifyingCalls选项,我认为它应该完全符合您的要求.但它没有实施,the only usage被注释掉了:
private void AddModifyingCall(ApiCall apiCall,MethodCall methodCall) { // TODO: this needs scripting ////if (RemoveRedundantModifyingCalls) ////{ //// var before = Evaluate(apiCall,UseDefaultFormatting); //// apiCall.Add(methodCall); //// var after = Evaluate(apiCall,UseDefaultFormatting); //// if (before == after) //// { //// apiCall.Remove(methodCall); //// } ////} apiCall.Add(methodCall); return; }