internal static LanguageVersion RequiredVersion()

in src/Compilers/CSharp/Portable/Errors/MessageID.cs [182:282]


        internal static LanguageVersion RequiredVersion(this MessageID feature)
        {
            // Based on CSourceParser::GetFeatureUsage from SourceParser.cpp.
            // Checks are in the LanguageParser unless otherwise noted.
            switch (feature)
            {
                // C# 7.2 features.
                case MessageID.IDS_FeatureNonTrailingNamedArguments: // semantic check
                case MessageID.IDS_FeatureLeadingDigitSeparator:
                case MessageID.IDS_FeaturePrivateProtected:
                case MessageID.IDS_FeatureReadOnlyReferences:
                case MessageID.IDS_FeatureRefStructs:
                case MessageID.IDS_FeatureReadOnlyStructs:
                case MessageID.IDS_FeatureRefExtensionMethods:
                case MessageID.IDS_FeatureRefConditional:
                    return LanguageVersion.CSharp7_2;

                // C# 7.1 features.
                case MessageID.IDS_FeatureAsyncMain:
                case MessageID.IDS_FeatureDefaultLiteral:
                case MessageID.IDS_FeatureInferredTupleNames:
                case MessageID.IDS_FeatureGenericPatternMatching:
                    return LanguageVersion.CSharp7_1;

                // C# 7 features.
                case MessageID.IDS_FeatureBinaryLiteral:
                case MessageID.IDS_FeatureDigitSeparator:
                case MessageID.IDS_FeatureLocalFunctions:
                case MessageID.IDS_FeatureRefLocalsReturns:
                case MessageID.IDS_FeaturePatternMatching:
                case MessageID.IDS_FeatureThrowExpression:
                case MessageID.IDS_FeatureTuples:
                case MessageID.IDS_FeatureOutVar:
                case MessageID.IDS_FeatureExpressionBodiedAccessor:
                case MessageID.IDS_FeatureExpressionBodiedDeOrConstructor:
                    return LanguageVersion.CSharp7;

                // C# 6 features.
                case MessageID.IDS_FeatureExceptionFilter:
                case MessageID.IDS_FeatureAutoPropertyInitializer:
                case MessageID.IDS_FeatureNullPropagatingOperator:
                case MessageID.IDS_FeatureExpressionBodiedMethod:
                case MessageID.IDS_FeatureExpressionBodiedProperty:
                case MessageID.IDS_FeatureExpressionBodiedIndexer:
                case MessageID.IDS_FeatureNameof:
                case MessageID.IDS_FeatureDictionaryInitializer:
                case MessageID.IDS_FeatureUsingStatic:
                case MessageID.IDS_FeatureInterpolatedStrings:
                case MessageID.IDS_AwaitInCatchAndFinally:
                case MessageID.IDS_FeatureReadonlyAutoImplementedProperties:
                    return LanguageVersion.CSharp6;

                // C# 5 features.
                case MessageID.IDS_FeatureAsync:
                    return LanguageVersion.CSharp5;

                // C# 4 features.
                case MessageID.IDS_FeatureDynamic: // Checked in the binder.
                case MessageID.IDS_FeatureTypeVariance:
                case MessageID.IDS_FeatureNamedArgument:
                case MessageID.IDS_FeatureOptionalParameter:
                    return LanguageVersion.CSharp4;

                // C# 3 features.
                case MessageID.IDS_FeatureImplicitArray:
                case MessageID.IDS_FeatureAnonymousTypes:
                case MessageID.IDS_FeatureObjectInitializer:
                case MessageID.IDS_FeatureCollectionInitializer:
                case MessageID.IDS_FeatureLambda:
                case MessageID.IDS_FeatureQueryExpression:
                case MessageID.IDS_FeatureExtensionMethod:
                case MessageID.IDS_FeaturePartialMethod:
                case MessageID.IDS_FeatureImplicitLocal: // Checked in the binder.
                case MessageID.IDS_FeatureAutoImplementedProperties:
                    return LanguageVersion.CSharp3;

                // C# 2 features.
                case MessageID.IDS_FeatureGenerics: // Also affects crefs.
                case MessageID.IDS_FeatureAnonDelegates:
                case MessageID.IDS_FeatureGlobalNamespace: // Also affects crefs.
                case MessageID.IDS_FeatureFixedBuffer:
                case MessageID.IDS_FeatureStaticClasses:
                case MessageID.IDS_FeaturePartialTypes:
                case MessageID.IDS_FeaturePropertyAccessorMods:
                case MessageID.IDS_FeatureExternAlias:
                case MessageID.IDS_FeatureIterators:
                case MessageID.IDS_FeatureDefault:
                case MessageID.IDS_FeatureNullable:
                case MessageID.IDS_FeaturePragma: // Checked in the directive parser.
                case MessageID.IDS_FeatureSwitchOnBool: // Checked in the binder.
                    return LanguageVersion.CSharp2;

                // Special C# 2 feature: only a warning in C# 1.
                case MessageID.IDS_FeatureModuleAttrLoc:
                    Debug.Assert(false, "Should be handled specially");
                    return LanguageVersion.CSharp1;

                default:
                    throw ExceptionUtilities.UnexpectedValue(feature);
            }
        }