在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/

10-10 22:14