首页 > 匿名对象

理解c# Anonymous 匿名类型

描述

c#编程语言中的匿名类型提供了一种简单的方式,可以将不同的属性封装在单个对象中。与类中的属性不同,匿名类型对象的属性是只读的。我们可以在类中创建只读属性,但并非所有属性都是强制只读的。

 

匿名类型声明和初始化

面的代码示例演示了使用Username和Password两个属性声明和初始化匿名类型。

var loginCredentials = new { Username = "suresh", Password = "********" };
 
Console.WriteLine("Username " + loginCredentials.Username.ToString());
Console.WriteLine("Password " + loginCredentials.Password.ToString());


LINQ查询中的匿名对象

class Program
{
    static void Main(string[] args)
    {
        IList<Employee> employees = new List<Employee>() {
        new Employee() { ID = 101, Name = "Peter", Age = 27 },
        new Employee() { ID = 102, Name = "Parker",  Age = 35 },
        new Employee() { ID = 103, Name = "Robert",  Age = 32 },
    };
 
        var employeeDetails = from emp in employees
                              select new { Id = emp.ID, Name = emp.Name, Age = emp.Age };
 
        foreach (var employeeDetail in employeeDetails)
            Console.WriteLine(employeeDetail.Id + "-" + employeeDetail.Name + "-" + employeeDetail.Age);
    }
}
 
public class Employee
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

image.png


反射输出匿名对象

static void Main(string[] args)
{
    var loginCredentials = new { UserName = "suresh", Password = "********" };
    PrintValues(loginCredentials);
}
 
static void PrintValues(object credentials)
{
    Type type = credentials.GetType();
    PropertyInfo[] info = type.GetProperties();
 
    foreach (var item in info)
    {
        var value = item.GetValue(credentials);
        Console.WriteLine(value.ToString());
    }
}

当然也可以用json.net序列化成json