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);
}
}