From 3c47aaf8feb779c8355d6fd251e6e015fb4925fd Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 31 May 2023 13:48:05 +0800 Subject: [PATCH] update internal code --- FreeSql/Extensions/FreeSqlGlobalExtensions.cs | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index 786e1803..dc96f6ed 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -138,8 +138,27 @@ public static partial class FreeSqlGlobalExtensions .Append(string.Join(", ", genericParameters.Select(a => a.DisplayCsharp()))) .Append('>'); - sb.Append('(').Append(string.Join(", ", method.GetParameters().Select(a => $"{a.ParameterType.DisplayCsharp()} {a.Name}"))).Append(')'); + sb.Append("(").Append(string.Join(", ", method.GetParameters().Select(a => LocalDisplayCsharpParameter(a)))).Append(")"); return sb.ToString(); + + string LocalDisplayCsharpParameter(ParameterInfo lp) + { + var pstr = ""; + object[] pattrs = new object[0]; + try { pattrs = lp.GetCustomAttributes(false); } catch { } + if (pattrs.Any(a => a is ParamArrayAttribute)) pstr = "params "; + pstr = $"{pstr}{lp.ParameterType.DisplayCsharp()} {lp.Name}"; +#if net40 + if (pattrs.Any(a => a is System.Runtime.InteropServices.OptionalAttribute) == false) return pstr; +#else + if (lp.HasDefaultValue == false) return pstr; +#endif + if (lp.DefaultValue == null) return $"{pstr} = null"; + if (lp.ParameterType == typeof(string)) return $"{pstr} = \"{lp.DefaultValue.ToString().Replace("\"", "\\\"").Replace("\r\n", "\\r\\n").Replace("\n", "\\n")}\""; + if (lp.ParameterType == typeof(bool) || lp.ParameterType == typeof(bool?)) return $"{pstr} = {lp.DefaultValue.ToString().Replace("False", "false").Replace("True", "true")}"; + if (lp.ParameterType.IsEnum) return $"{pstr} = {lp.ParameterType.DisplayCsharp(false)}.{lp.DefaultValue}"; + return $"{pstr} = {lp.DefaultValue}"; + } } public static object CreateInstanceGetDefaultValue(this Type that) {