나는 Roslyn을 LinqPad처럼 사용하려고하는데, C#을 완벽하게 사용하는 코드 스 니펫을 사용하고 있으며 유효하지 않다고 들었습니다. 이 늪지 표준 유틸리티 방법을 고려하십시오. 나를 ToUnderlying
에 대한 out 매개 변수를 호출하는내가 잘못했거나 Roslyn REPL이 과보호되고 있습니까?
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>;
}
}
로슬린은 무효라고 주장하고있다.
왜 정적 생성자를 사용하지 않는지 묻기 전에, 내 클래스에 beforefieldinit
클래스 특성을 유지해야합니다. 그렇지 않으면 메서드에 액세스 할 때마다 초기화 할 때 비용을 지불하게됩니다. C#에서는 유효한 것으로 간주되지만 Roslyn이 말하고 있습니다. (6,76): error CS0199: A static readonly field cannot be passed ref or out (except in a static constructor)
감사합니다. CTP의 다음 버전이 출시 될 때 어떤 단어가 나옵니까? –