May 16, 2017

Example of generic and extension method in C#

namespace GenericSample
{
    public class DropdownListItem
    {
        public string Description { get; set; }
        public int Value { get; set; }
    }

    public class User
    {
        public int UserID { get; set; }
        public string UserName { get; set; }
    }

    public class Role
    {
        public int RoleID { get; set; }
        public string RoleName { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<User> users = new List<User>();
            users.Add(new User() { UserID = 1, UserName = "Hemant" });
            users.Add(new User() { UserID = 2, UserName = "Vijay" });

            List<Role> roles = new List<Role>();
            roles.Add(new Role() { RoleID = 1, RoleName = "Admin" });
            roles.Add(new Role() { RoleID = 2, RoleName = "Manager" });

            List<DropdownListItem> ddlUsers = users.ToSelectList<User>(u => u.UserName, u => u.UserID).ToList();

            Console.WriteLine("User Details:-");
            foreach (DropdownListItem ddl in ddlUsers)
            {
                Console.WriteLine("UserID: {0}, UserName : {1}", ddl.Value, ddl.Description);
            }
           
            List<DropdownListItem> ddlRoles = roles.ToSelectList<Role>(u => u.RoleName, u => u.RoleID).ToList();
            Console.WriteLine("Role Details:-");
            foreach (DropdownListItem ddl in ddlRoles)
            {
                Console.WriteLine("RoleID: {0}, RoleName : {1}", ddl.Value, ddl.Description);
            }
            Console.ReadLine();
        }
    }

    static class GenticClass
    {
        // Generic extension method to convert a type into DropDownItem
        public static List<DropdownListItem> ToSelectList<T>(this List<T> glist, Func<T, string> text, Func<T, int> value)
        {
            List<DropdownListItem> ddlList = new List<DropdownListItem>();
            glist.ForEach(x =>
            {
                ddlList.Add(new DropdownListItem() { Value = value(x), Description = text(x) });
            });
            return ddlList;
        }
    }
}


No comments: