FieldInfo - GetDeclaraction
A FieldInfo extension method that gets a declaraction.
public static void Main() { FieldInfo constField = typeof(FieldModel<int>).GetField("ConstField", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); FieldInfo eventField = typeof(FieldModel<int>).GetField("EventField", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); FieldInfo internalField = typeof(FieldModel<int>).GetField("InternalField", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); //C# Extension Method: FieldInfo - GetDeclaraction string constFieldResult = constField.GetDeclaraction(); string eventFieldResult = eventField.GetDeclaraction(); string internalFieldResult = internalField.GetDeclaraction(); Console.WriteLine(constFieldResult); Console.WriteLine(eventFieldResult); Console.WriteLine(internalFieldResult); } public class FieldModel<T> { public const int ConstField = 1; public static int StaticField; public readonly int ReadOnlyField = 1; public volatile int VolatileField = 1; public event EventHandler EventField; internal int InternalField; protected internal int ProtectedInternalField; private int PrivateField; protected int ProtectedField; public int PublicField; public T GenericField; }
View Source
using System; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Text; public static partial class Extensions { /// <summary>A FieldInfo extension method that gets a declaraction.</summary> /// <param name="this">The @this to act on.</param> /// <returns>The declaraction.</returns> public static string GetDeclaraction(this FieldInfo @this) { // Example: [Visibility] [Modifier] [Type] [Name] [PostModifier]; var sb = new StringBuilder(); // Variable bool isConstant = false; Type[] requiredTypes = @this.GetRequiredCustomModifiers(); // Visibility if (@this.IsPublic) { sb.Append("public "); } else if (@this.IsPrivate) { sb.Append("private "); } else if (@this.IsFamily) { sb.Append("protected "); } else if (@this.IsAssembly) { sb.Append("internal "); } else { sb.Append("protected internal "); } // Modifier if (@this.IsStatic) { if (@this.IsLiteral) { isConstant = true; sb.Append("const "); } else { sb.Append("static "); } } else if (@this.IsInitOnly) { sb.Append("readonly "); } if (requiredTypes.Any(x => x == typeof (IsVolatile))) { sb.Append("volatile "); } // Type sb.Append(@this.FieldType.GetShortDeclaraction()); sb.Append(" "); // Name sb.Append(@this.Name); // PostModifier if (isConstant) { sb.Append(" = " + @this.GetRawConstantValue()); } // End sb.Append(";"); return sb.ToString(); } }