在Roslyn中引入操作时,目标之一是提供降低的操作(我认为这是在设计评审 session 视频中),据我所知,应该为高层编译器隐式操作提供显式操作。我在Roslyn中看到了降低目录,但是那里的类是内部的。现在有可能降低操作数量,或者还没有可用的公共(public)API?
在下面的示例中,操作已经删除了一些隐式部分-为表达式主体添加return语句,并为重载运算符公开符号。但是前后的增量仅在种类上有所不同。
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Semantics;
using System.Linq;
namespace so39468373
{
internal static class Program
{
private static void Main()
{
var tree = CSharpSyntaxTree.ParseText(@"
public class c
{
public static c operator ++(c o) { return o; }
static c pre(c o) => ++o;
static c post(c o) => o++;
public static void Main() {}
}");
var mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create(null, new[] { tree }, new[] { mscorlib });
var model = compilation.GetSemanticModel(tree);
foreach (var node in tree.GetRoot().DescendantNodes().OfType<ArrowExpressionClauseSyntax>())
{
var operation = model.GetOperation(node);
var block = (IBlockStatement)operation;
var statement = (IReturnStatement)block.Statements.First();
var increment = (IIncrementExpression)statement.ReturnedValue;
// How to get lowered operations for increment here?
}
}
}
}
GitHub上的代码-https://github.com/isanych/so-39468373
最佳答案
这个答案有不同的角度-编译器的这方面如何?InternalVisibleTo Attribute
链接:https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute(v=vs.110).aspx
可能使与“不同角度”有关的对话话题变得有趣,可以用来进行调试?
更多信息(来自文章):
版本信息
通用Windows平台
自8起可用
.NET Framework
从2.0开始可用
便携式类库
受支持:便携式.NET平台
Silverlight
从2.0开始可用
Windows Phone Silverlight
自7.0起可用
Windows Phone
自8.1起可用
关于c# - 降低罗林的运营,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39468373/