//****************************************************************************************************** // MethodBaseExtensions.cs - Gbtc // // Copyright © 2016, Grid Protection Alliance. All Rights Reserved. // // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See // the NOTICE file distributed with this work for additional information regarding copyright ownership. // The GPA licenses this file to you under the Eclipse Public License -v 1.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain a copy of the License at: // // http://www.opensource.org/licenses/eclipse-1.0.php // // Unless agreed to in writing, the subject software distributed under the License is distributed on an // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the // License for the specific language governing permissions and limitations. // // Code Modification History: // ---------------------------------------------------------------------------------------------------- // 10/24/2016 - Steven E. Chisholm // Generated original version of source code. // //****************************************************************************************************** using System; using System.Reflection; using System.Text; namespace GSF.Reflection { /// /// Defines extensions methods related to extension functions for instances. /// public static class MethodBaseExtensions { /// /// Gets the friendly method name of the provided type, trimming generic parameters. /// /// Type to get friendly method name for. /// Friendly method name of the provided type, or if is null. public static string GetFriendlyMethodName(this MethodBase method) { if ((object)method == null) return string.Empty; bool appendComma; StringBuilder name = new StringBuilder(); name.Append(method.Name); if (method is MethodInfo && method.IsGenericMethod) { appendComma = false; name.Append("<"); foreach (Type arg in method.GetGenericArguments()) { if (appendComma) name.Append(","); else appendComma = true; name.Append(arg.Name); } name.Append(">"); } appendComma = false; name.Append("("); foreach (ParameterInfo param in method.GetParameters()) { if (appendComma) name.Append(", "); else appendComma = true; name.Append(param.ParameterType.Name); name.Append(" "); name.Append(param.Name); } name.Append(")"); return name.ToString(); } /// /// Gets the friendly method name with class of the provided type, trimming generic parameters. /// /// Type to get friendly method name with class for. /// Friendly method name with class of the provided type, or if is null. public static string GetFriendlyMethodNameWithClass(this MethodBase method) { string className = method.GetFriendlyClassName(); string methodName = method.GetFriendlyMethodName(); if (className.Length == 0) return methodName; return className + "." + methodName; } } }