What is Anonymous
Type in C#?
Anonymous types are easy way to
encapsulate a set of read-only properties into a single object without having
to explicitly define a type first.
In simple language anonymous type is a
class without name containing only read-only public properties.
Note:
- The type name is generated by the
compiler and is not available at the source code level. The type of each
property is inferred by the compiler.
- If you do not specify member names in
the anonymous type, the compiler gives the anonymous type members the same name
as the property being used to initialize them.
How to create and
use anonymous types in C#?
The following first example shows an
anonymous type that is initialized with two properties named Id and Name.
Following 2nd example Anonymous
type “ITDepartment” created with LINQ query
select clause, first parameter is not named but used inferred anonymous type
member(compiler gives name of department id) name and another parameter is
named “depName”.
Example:
public void ExmployeeData()
{
var Departments = GetAllDepartments();
//1. anonymous type “Employee” with properties named Id and Name.
var Employee = new { Id="sk14",Name = "Shourya" };
//2. anonymous type "ITDepartment" with LINQ query filter
var ITDepartment = from dep in Departments
where dep.Name == "IT"
select new {dep.Id, DepName = dep.Name };
//how to use it?
Console.WriteLine("Employee Id :" + Employee.Id);
Console.WriteLine("Employee Id :" + Employee.Name);
Console.WriteLine("Employee Department Name :" + ITDepartment.FirstOrDefault().DepName);
}
Sample class and method to
create in memory department collection.
public class Department
{
public int
Id { get;
set; }
public string Name { get; set;
}
}
public List<Department> GetAllDepartments()
{
var departments = new List<Department>();
var ITDepartment = new Department
{
Id = 1,
Name = "IT"
};
var AccountDepartment = new Department
{
Id = 2,
Name = "Account"
};
departments.Add(ITDepartment);
departments.Add(AccountDepartment);
return departments;
}
How
to return anonymous type with
Web API?
In follwing code example web method returns anonymous type "Employee"
[HttpGet]
[Route("GetEmployeeData")]
public IHttpActionResult GetEmployeeData()
{
//anonymous type Employee with properties named Id and Name.
var Employee = new { Id = "sk14", Name = "Shourya" };
// Status Code 200;
return this.Ok(Employee);
}
How to return anonymous
type with method?
//Return anonymous Type as object
public object GetAnonymousData()
{
return new { Id = "sk14", Name = "Shourya" };
}
//Display anonymous Type values from object
public void
DisplayAnonymousData()
{
object refobj = GetAnonymousData();
Type type = refobj.GetType();
PropertyInfo[] fields =
type.GetProperties();
foreach (var field in fields)
{
string name = field.Name;
var firstValue = field.GetValue(refobj, null);
Console.WriteLine("Employee Name " +
firstValue);
}
}