//----------------------------------------------------------------------- // This file is part of the Microsoft .NET SDK Code Samples. // // Copyright (C) Microsoft Corporation. All rights reserved. // //This source code is intended only as a supplement to Microsoft //Development Tools and/or on-line documentation. See these other //materials for detailed information regarding Microsoft code samples. // //THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY //KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE //IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A //PARTICULAR PURPOSE. //----------------------------------------------------------------------- using System ; using System.Text; using System.Web; using System.Web.UI; using System.Collections; using System.Globalization; using System.Reflection; namespace ClassInfo { public class ClassNameFormatter { static public String GetClassName(Type type) { if (type.IsGenericType) { StringBuilder sb = new StringBuilder(); GetClassNameInternal(type, sb); return HttpContext.Current.Server.HtmlEncode(sb.ToString()); } else { return type.Name; } } static private void GetClassNameInternal(Type type, StringBuilder sb) { if (type.IsGenericType) { String typeName = type.Name; int delim = typeName.IndexOf('`'); sb.Append(typeName, 0, delim > 0 ? delim : typeName.Length); sb.Append('<'); Type[] genericParameters = type.GetGenericArguments(); for (int i = 0; i < genericParameters.Length; i++) { if (genericParameters[i].IsGenericParameter) { sb.Append(genericParameters[i].Name); } else { GetClassNameInternal(genericParameters[i], sb); } if (i < genericParameters.Length - 1) { sb.Append(','); } } sb.Append('>'); } else { sb.Append(type.Name); } } } public class SortTable : Hashtable, IComparable { public String sortField; public SortTable() : this(null) { } public SortTable(String sField) { sortField = sField; } public int CompareTo(Object b) { if ( sortField == null ) { return 0; } return (String.Compare( (String)this[sortField], (String)((SortTable)b)[sortField], false, CultureInfo.InvariantCulture)); } } public class DisplayEvents : ArrayList { public DisplayEvents(Type classType) { System.Reflection.EventInfo[] eventInfos = classType.GetEvents(BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static); if (eventInfos == null) return; ArrayList eventTable = new ArrayList(); for (int x=0; x