Я ошибаюсь или Roslyn REPL чрезмерно защищает?

Я пытаюсь использовать Roslyn как LinqPad, но я беру фрагменты кода, которые полностью соответствуют C#, а мне говорят, что они недействительны. Рассмотрим этот болотный стандартный служебный метод.

public static class EnumConvert<TEnum, TUnderlying>
    where TEnum : struct,IFormattable, IConvertible, IComparable
    where TUnderlying : struct,IFormattable, IConvertible, IComparable, IComparable<TUnderlying>, IEquatable<TUnderlying>
{
    public static readonly Converter<TEnum, TUnderlying> ToUnderlying;

    public static readonly Converter<TUnderlying, TEnum> ToEnum = 
        Init(out ToUnderlying);

    private static Converter<TUnderlying, TEnum> Init(out Converter<TEnum, TUnderlying> underlier)
    {
        if (Type.GetTypeCode(typeof(TEnum)) != Type.GetTypeCode(typeof(TUnderlying)) || 
            typeof(TEnum) == typeof(TUnderlying))
        {
            throw new ArgumentException("TEnum does not derive from TUnderlying");
        }
        Func<TUnderlying, TUnderlying> Identity = x => x;
        underlier = Delegate.CreateDelegate(typeof(Converter<TEnum, TUnderlying>), Identity.Method) as Converter<TEnum, TUnderlying>;
        return Delegate.CreateDelegate(typeof(Converter<TUnderlying, TEnum>), Identity.Method) as Converter<TUnderlying, TEnum>;
    }
}

Рослин утверждает, что мне нельзя вызывать параметр out для ToUnderlying.

Прежде чем вы спросите меня, почему я не использую статический конструктор, я хотел бы убедиться, что сохраняю атрибут класса beforefieldinit в своем классе. В противном случае я буду платить за его инициализацию каждый раз при доступе к методу. В C# это считается допустимым, но Рослин говорит мне, что (6,76): error CS0199: A static readonly field cannot be passed ref or out (except in a static constructor)


person Michael B    schedule 23.01.2014    source источник


Ответы (1)


Похоже, вы просто столкнулись с ошибкой в ​​компиляторе Roslyn в используемой вами версии CTP. В текущей (внутренней для Microsoft) сборке Roslyn нет проблем с этим кодом.

person Jason Malinowski    schedule 23.01.2014
comment
Спасибо, есть информация о том, когда выйдет следующая версия CTP? - person Michael B; 24.01.2014