using System.Collections.Generic;
[AttributeUsage(AttributeTargets.All, Inherited = true)]
public class DisplayNameAttribute : Attribute {
private readonly string _title;
public DisplayNameAttribute(string title) {
public class SampleController {
public void SampleAction() {
public static class Extensions {
public static string GetDisplayName(this MemberInfo target) {
return target.GetCustomAttributes(typeof(DisplayNameAttribute), true)
.Cast<DisplayNameAttribute>().Select(d => d.Title)
.SingleOrDefault() ?? target.Name;
public static class Program
public static void Main() {
ListTypeInfo(typeof(SampleController));
static void ListTypeInfo(Type type) {
Console.WriteLine("* {0}", type.GetDisplayName());
foreach (var action in type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)) {
Console.WriteLine("** {0}", action.GetDisplayName());