From 214917b6454a7a980c8bab1d46e55f32d78a8240 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Thu, 14 Jan 2021 08:56:34 +1100 Subject: [PATCH] merge type checks beter perf via less type checking --- RepoDb.Core/RepoDb/ClassProperty.cs | 4 +- RepoDb.Core/RepoDb/Converter.cs | 4 +- .../RepoDb/Extensions/ArrayExtension.cs | 4 +- .../RepoDb/Extensions/DbCommandExtension.cs | 18 +++---- .../Extensions/DbConnectionExtension.cs | 52 +++++++++---------- .../RepoDb/Extensions/EnumerableExtension.cs | 8 +-- RepoDb.Core/RepoDb/QueryField.cs | 5 +- .../RepoDb/QueryGroup/AsMappedObject.cs | 7 +-- 8 files changed, 51 insertions(+), 51 deletions(-) diff --git a/RepoDb.Core/RepoDb/ClassProperty.cs b/RepoDb.Core/RepoDb/ClassProperty.cs index 57c200a9d..be0613210 100644 --- a/RepoDb.Core/RepoDb/ClassProperty.cs +++ b/RepoDb.Core/RepoDb/ClassProperty.cs @@ -307,9 +307,9 @@ public override int GetHashCode() => /// True if the two instance is the same. public override bool Equals(object obj) { - if (obj is ClassProperty) + if (obj is ClassProperty property) { - return PropertyInfo.Equals(((ClassProperty)obj).PropertyInfo); + return PropertyInfo.Equals(property.PropertyInfo); } return Equals(obj); } diff --git a/RepoDb.Core/RepoDb/Converter.cs b/RepoDb.Core/RepoDb/Converter.cs index a83a5980c..88650b727 100644 --- a/RepoDb.Core/RepoDb/Converter.cs +++ b/RepoDb.Core/RepoDb/Converter.cs @@ -44,9 +44,9 @@ public static object DbNullToNull(object value) => /// The converted value. public static T ToType(object value) { - if (value is T) + if (value is T t) { - return (T)value; + return t; } return value == null || DbNullToNull(value) == null ? default(T) : (T)Convert.ChangeType(value, typeof(T)); diff --git a/RepoDb.Core/RepoDb/Extensions/ArrayExtension.cs b/RepoDb.Core/RepoDb/Extensions/ArrayExtension.cs index 1739c711f..37a006b5a 100644 --- a/RepoDb.Core/RepoDb/Extensions/ArrayExtension.cs +++ b/RepoDb.Core/RepoDb/Extensions/ArrayExtension.cs @@ -28,9 +28,9 @@ public static IEnumerable AsEnumerable(this Array array) { foreach (var value in array) { - if (value is T) + if (value is T t) { - yield return (T)value; + yield return t; } } } diff --git a/RepoDb.Core/RepoDb/Extensions/DbCommandExtension.cs b/RepoDb.Core/RepoDb/Extensions/DbCommandExtension.cs index 59980cd4c..4b56249a7 100644 --- a/RepoDb.Core/RepoDb/Extensions/DbCommandExtension.cs +++ b/RepoDb.Core/RepoDb/Extensions/DbCommandExtension.cs @@ -205,21 +205,21 @@ internal static void CreateParameters(this IDbCommand command, } // QueryField - else if (param is QueryField) + else if (param is QueryField field) { - CreateParameters(command, (QueryField)param, propertiesToSkip, entityType, dbFields); + CreateParameters(command, field, propertiesToSkip, entityType, dbFields); } // IEnumerable - else if (param is IEnumerable) + else if (param is IEnumerable fields) { - CreateParameters(command, (IEnumerable)param, propertiesToSkip, entityType, dbFields); + CreateParameters(command, fields, propertiesToSkip, entityType, dbFields); } // QueryGroup - else if (param is QueryGroup) + else if (param is QueryGroup group) { - CreateParameters(command, (QueryGroup)param, propertiesToSkip, entityType, dbFields); + CreateParameters(command, group, propertiesToSkip, entityType, dbFields); } // Other @@ -330,9 +330,8 @@ private static void CreateParameters(IDbCommand command, var valueType = (Type)null; // CommandParameter - if (kvp.Value is CommandParameter) + if (kvp.Value is CommandParameter commandParameter) { - var commandParameter = (CommandParameter)kvp.Value; classProperty = PropertyCache.Get(commandParameter.MappedToType, kvp.Key); value = commandParameter.Value; valueType = value?.GetType()?.GetUnderlyingType(); @@ -516,9 +515,8 @@ private static void CreateParameters(this IDbCommand command, // Direction var parameterDirection = (ParameterDirection?)null; - if (queryField is DirectionalQueryField) + if (queryField is DirectionalQueryField directionalQueryField) { - var directionalQueryField = (DirectionalQueryField)queryField; parameterDirection = directionalQueryField.Direction; // Ensure the DB type diff --git a/RepoDb.Core/RepoDb/Extensions/DbConnectionExtension.cs b/RepoDb.Core/RepoDb/Extensions/DbConnectionExtension.cs index df0361eb3..111843a0d 100644 --- a/RepoDb.Core/RepoDb/Extensions/DbConnectionExtension.cs +++ b/RepoDb.Core/RepoDb/Extensions/DbConnectionExtension.cs @@ -1811,34 +1811,34 @@ public static IStatementBuilder GetStatementBuilder(this IDbConnection connectio #region DbParameters /// - /// + /// /// /// internal static void SetOutputParameters(object param) { - if (param is QueryGroup) + if (param is QueryGroup group) { - SetOutputParameters((QueryGroup)param); + SetOutputParameters(group); } - else if (param is IEnumerable) + else if (param is IEnumerable fields) { - SetOutputParameters((IEnumerable)param); + SetOutputParameters(fields); } - else if (param is QueryField) + else if (param is QueryField field) { - SetOutputParameter((QueryField)param); + SetOutputParameter(field); } } /// - /// + /// /// /// internal static void SetOutputParameters(QueryGroup queryGroup) => SetOutputParameters(queryGroup.GetFields(true)); /// - /// + /// /// /// internal static void SetOutputParameters(IEnumerable queryFields) @@ -1854,7 +1854,7 @@ internal static void SetOutputParameters(IEnumerable queryFields) } /// - /// + /// /// /// internal static void SetOutputParameter(QueryField queryField) @@ -1871,7 +1871,7 @@ internal static void SetOutputParameter(QueryField queryField) #region Order Columns /// - /// + /// /// /// /// @@ -2357,17 +2357,17 @@ internal static QueryGroup WhatToQueryGroup(T what) { return null; } - else if (what is QueryField) + else if (what is QueryField field) { - return ToQueryGroup(what as QueryField); + return ToQueryGroup(field); } - else if (what is IEnumerable) + else if (what is IEnumerable fields) { - return ToQueryGroup(what as IEnumerable); + return ToQueryGroup(fields); } - else if (what is QueryGroup) + else if (what is QueryGroup group) { - return what as QueryGroup; + return group; } else { @@ -2901,28 +2901,28 @@ internal static CommandArrayParametersText GetCommandArrayParametersText(string // ExpandoObject if (param is ExpandoObject || param is System.Collections.IDictionary) { - if (param is IDictionary) + if (param is IDictionary objects) { - return GetCommandArrayParametersText(commandText, (IDictionary)param, dbSetting); + return GetCommandArrayParametersText(commandText, objects, dbSetting); } } // QueryField - else if (param is QueryField) + else if (param is QueryField field) { - return GetCommandArrayParametersText(commandText, (QueryField)param, dbSetting); + return GetCommandArrayParametersText(commandText, field, dbSetting); } // QueryFields - else if (param is IEnumerable) + else if (param is IEnumerable fields) { - return GetCommandArrayParametersText(commandText, (IEnumerable)param, dbSetting); + return GetCommandArrayParametersText(commandText, fields, dbSetting); } // QueryGroup - else if (param is QueryGroup) + else if (param is QueryGroup group) { - return GetCommandArrayParametersText(commandText, (QueryGroup)param, dbSetting); + return GetCommandArrayParametersText(commandText, group, dbSetting); } // Others @@ -3227,7 +3227,7 @@ internal static string GetRawSqlText(string commandText, } // Items - var items = values is IEnumerable ? (IEnumerable)values : values.WithType(); + var items = values is IEnumerable objects ? objects : values.WithType(); if (items.Any() != true) { var parameter = parameterName.AsParameter(dbSetting); diff --git a/RepoDb.Core/RepoDb/Extensions/EnumerableExtension.cs b/RepoDb.Core/RepoDb/Extensions/EnumerableExtension.cs index 045414b94..7d22c1608 100644 --- a/RepoDb.Core/RepoDb/Extensions/EnumerableExtension.cs +++ b/RepoDb.Core/RepoDb/Extensions/EnumerableExtension.cs @@ -50,7 +50,7 @@ public static IEnumerable> Split(this IEnumerable value, /// The object in which the items are of type . [Obsolete("Use the 'WithType' method insted.")] public static IEnumerable OfTargetType(this IEnumerable value) => - value is IEnumerable ? (IEnumerable)value : value.OfType(); + value is IEnumerable types ? types : value.OfType(); /// /// Checks whether the instance of is of type , then casts it, otherwise, @@ -61,7 +61,7 @@ public static IEnumerable OfTargetType(this /// The actual enumerable instance. /// The object in which the items are of type . public static IEnumerable WithType(this System.Collections.IEnumerable value) => - value is IEnumerable ? (IEnumerable)value : value.OfType(); + value is IEnumerable enumerable ? enumerable : value.OfType(); /// /// Checks whether the instance of is of type , then casts it, otherwise, converts it. @@ -71,7 +71,7 @@ public static IEnumerable WithType(this System.Collections.IEnumerable val /// The actual enumerable instance. /// The converted object. public static List AsList(this IEnumerable value) => - value is List ? (List)value : value?.ToList(); + value is List list ? list : value?.ToList(); /// /// Checks whether the instance of is an array of , then casts it, otherwise, converts it. @@ -81,6 +81,6 @@ public static List AsList(this IEnumerable value) => /// The actual enumerable instance. /// The converted object. public static T[] AsArray(this IEnumerable value) => - value is T[]? (T[])value : value?.ToArray(); + value is T[] array ? array : value?.ToArray(); } } diff --git a/RepoDb.Core/RepoDb/QueryField.cs b/RepoDb.Core/RepoDb/QueryField.cs index d089c3bd9..ab3ab5104 100644 --- a/RepoDb.Core/RepoDb/QueryField.cs +++ b/RepoDb.Core/RepoDb/QueryField.cs @@ -2,6 +2,7 @@ using RepoDb.Enumerations; using RepoDb.Extensions; using System; +using System.Collections; using System.Data; using System.Data.Common; using System.Linq; @@ -248,9 +249,9 @@ public override int GetHashCode() } // The parameter's length affects the uniqueness of the object else if ((Operation == Operation.In || Operation == Operation.NotIn) && - Parameter.Value != null && Parameter.Value is System.Collections.IEnumerable) + Parameter.Value != null && Parameter.Value is IEnumerable enumerable) { - var items = ((System.Collections.IEnumerable)Parameter.Value); + var items = enumerable; hashCode += items .WithType() .Count() diff --git a/RepoDb.Core/RepoDb/QueryGroup/AsMappedObject.cs b/RepoDb.Core/RepoDb/QueryGroup/AsMappedObject.cs index 10af0d695..408e888d1 100644 --- a/RepoDb.Core/RepoDb/QueryGroup/AsMappedObject.cs +++ b/RepoDb.Core/RepoDb/QueryGroup/AsMappedObject.cs @@ -1,4 +1,5 @@ -using RepoDb.Enumerations; +using System.Collections; +using RepoDb.Enumerations; using RepoDb.Extensions; using System.Collections.Generic; using System.Dynamic; @@ -199,9 +200,9 @@ private static IList GetValueList(T value) { var list = new List(); - if (value is System.Collections.IEnumerable) + if (value is IEnumerable enumerable) { - var items = ((System.Collections.IEnumerable)value) + var items = enumerable .WithType() .AsList(); list.AddRange(items);