diff --git a/src/Microsoft.AspNet.Mvc.Core/Rendering/Expressions/CachedExpressionCompiler.cs b/src/Microsoft.AspNet.Mvc.Core/Rendering/Expressions/CachedExpressionCompiler.cs index 9a5cbcdac6..b0a7ef3c69 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Rendering/Expressions/CachedExpressionCompiler.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Rendering/Expressions/CachedExpressionCompiler.cs @@ -25,10 +25,10 @@ namespace Microsoft.AspNet.Mvc.Rendering.Expressions { private static Func _identityFunc; - private static readonly ConcurrentDictionary> _simpleMemberAccessDict = + private static readonly ConcurrentDictionary> _simpleMemberAccessCache = new ConcurrentDictionary>(); - private static readonly ConcurrentDictionary> _constMemberAccessDict = + private static readonly ConcurrentDictionary> _constMemberAccessCache = new ConcurrentDictionary>(); public static Func Compile([NotNull] Expression> expression) @@ -88,23 +88,25 @@ namespace Microsoft.AspNet.Mvc.Rendering.Expressions if (memberExpression.Expression == expression.Parameters[0] || memberExpression.Expression == null) { // model => model.Member or model => StaticMember - return _simpleMemberAccessDict.GetOrAdd(memberExpression.Member, _ => expression.Compile()); + return _simpleMemberAccessCache.GetOrAdd(memberExpression.Member, _ => expression.Compile()); } var constantExpression = memberExpression.Expression as ConstantExpression; if (constantExpression != null) { // model => {const}.Member (captured local variable) - var compiledExpression = _constMemberAccessDict.GetOrAdd(memberExpression.Member, _ => + var compiledExpression = _constMemberAccessCache.GetOrAdd(memberExpression.Member, _ => { // rewrite as capturedLocal => ((TDeclaringType)capturedLocal).Member var parameterExpression = Expression.Parameter(typeof(object), "capturedLocal"); var castExpression = Expression.Convert(parameterExpression, memberExpression.Member.DeclaringType); - var newMemberExpression = memberExpression.Update(castExpression); - var newExpression = - Expression.Lambda>(newMemberExpression, parameterExpression); - return newExpression.Compile(); + var replacementMemberExpression = memberExpression.Update(castExpression); + var replacementExpression = Expression.Lambda>( + replacementMemberExpression, + parameterExpression); + + return replacementExpression.Compile(); }); var capturedLocal = constantExpression.Value; diff --git a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultDisplayTemplates.cs b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultDisplayTemplates.cs index a9b57a07ad..8949f76934 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultDisplayTemplates.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultDisplayTemplates.cs @@ -224,8 +224,8 @@ namespace Microsoft.AspNet.Mvc.Rendering var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices; var viewEngine = serviceProvider.GetRequiredService(); - - foreach (var propertyMetadata in modelMetadata.Properties.Where(pm => ShouldShow(pm, templateInfo))) + var properties = modelMetadata.Properties.Where(metadata => ShouldShow(metadata, templateInfo)); + foreach (var propertyMetadata in properties) { var divTag = new TagBuilder("div"); diff --git a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultEditorTemplates.cs b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultEditorTemplates.cs index 793e02823e..c5539ff742 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultEditorTemplates.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultEditorTemplates.cs @@ -248,8 +248,8 @@ namespace Microsoft.AspNet.Mvc.Rendering var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices; var viewEngine = serviceProvider.GetRequiredService(); - - foreach (var propertyMetadata in modelMetadata.Properties.Where(pm => ShouldShow(pm, templateInfo))) + var properties = modelMetadata.Properties.Where(metadata => ShouldShow(metadata, templateInfo)); + foreach (var propertyMetadata in properties) { var divTag = new TagBuilder("div"); @@ -315,8 +315,8 @@ namespace Microsoft.AspNet.Mvc.Rendering { return metadata.ShowForEdit && - !metadata.IsComplexType - && !templateInfo.Visited(metadata); + !metadata.IsComplexType && + !templateInfo.Visited(metadata); } public static string StringTemplate(IHtmlHelper htmlHelper) diff --git a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultHtmlGenerator.cs b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultHtmlGenerator.cs index aafc08dc82..037473b8af 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultHtmlGenerator.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultHtmlGenerator.cs @@ -1024,14 +1024,17 @@ namespace Microsoft.AspNet.Mvc.Rendering if (value == null) { throw new InvalidOperationException(Resources.FormatHtmlHelper_MissingSelectData( - "IEnumerable", expression)); + $"IEnumerable<{nameof(SelectListItem)}>", + expression)); } var selectList = value as IEnumerable; if (selectList == null) { throw new InvalidOperationException(Resources.FormatHtmlHelper_WrongSelectDataType( - expression, value.GetType().FullName, "IEnumerable")); + expression, + value.GetType().FullName, + $"IEnumerable<{nameof(SelectListItem)}>")); } return selectList; diff --git a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/HtmlHelperOfT.cs b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/HtmlHelperOfT.cs index 5b72c4fb98..620ca1244d 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/HtmlHelperOfT.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/HtmlHelperOfT.cs @@ -31,7 +31,7 @@ namespace Microsoft.AspNet.Mvc.Rendering if (viewContext.ViewData == null) { throw new ArgumentException(Resources.FormatPropertyOfTypeCannotBeNull( - "ViewData", + nameof(ViewContext.ViewData), typeof(ViewContext)), nameof(viewContext)); } @@ -41,7 +41,7 @@ namespace Microsoft.AspNet.Mvc.Rendering { // viewContext may contain a base ViewDataDictionary instance. So complain about that type, not TModel. throw new ArgumentException(Resources.FormatArgumentPropertyUnexpectedType( - "ViewData", + nameof(ViewContext.ViewData), viewContext.ViewData.GetType().FullName, typeof(ViewDataDictionary).FullName), nameof(viewContext));