匿名类型的C#.NET的真实世界示例

时间:2012-08-03 11:42:25

标签: c# .net

我在C#中学习匿名类型,我已经理解了它们的定义和使用方式。下面是我为Anonymous Type尝试的示例代码。

var myType = new {
Name = "Yasser",
City = "Mumbai"
};
Console.WriteLine("Name: {0}, Type: {1}", myType.Name, myType.City);

我的问题

在现实世界的情景中,这些会被使用吗?任何人都可以给我一个可以使用这些匿名类型的示例或场景。

6 个答案:

答案 0 :(得分:17)

LINQ查询大量使用它们:

var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

{ prod.Color, prod.Price }是一种匿名类型,具有只读ColorPrice属性。如果要遍历该查询的结果,可以将该类型用作任何其他类:

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}

换句话说,您不必定义一个看起来像这样的新类:

public class ColoredPricedItem
{
    public Color {get;}
    public Price {get;}
}

更多,ColorPrice类型是从您的查询中正确推断出来的。

答案 1 :(得分:5)

让我们说你有这种类:

class User
{
    public int ID;
    public string FirstName;
    public string LastName;
    public int Age;
    public string City;
    public string Country;
}

并创建一个通用列表,其中T是User类。您创建了n个用户。 关键是,您不希望在某个查询中显示所有字段(或属性),而只显示一个人的名字和姓氏(作为一个)以及该人所居住的城市。 所以你在Linq中使用一个新的关键字(我将展示如何使用Linq的don表示法):

        List<User> users = new List<User>();
        users.Add(new User { ID = 1, FirstName = "first 1", LastName = "last 1", Age = 32, City = "City 1", Country = "Country 1" });
        users.Add(new User { ID = 2, FirstName = "first 2", LastName = "last 2", Age = 33, City = "City 2", Country = "Country 2" });
        users.Add(new User { ID = 3, FirstName = "first 3", LastName = "last 3", Age = 34, City = "City 3", Country = "Country 3" });

        var query = users.Select(s => new
            {
                FIRST_LAST = string.Format("{0} {1}", s.FirstName, s.LastName),
                LIVING_IN = s.City
            }).ToList();
        foreach (var person in query)
        {
            string name = person.FIRST_LAST;
            string city = person.LIVING_IN;
        }

希望它有所帮助, 再见

答案 2 :(得分:3)

除了在Linq中使用外,它们还被asp.net MVC应用程序使用 在Global.asax.cs中映射路由

  routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
  );

答案 3 :(得分:3)

某些Web框架使用它们来表示HTML标记属性:

var t = new Table(new { align="left", bgcolor="red", cellpadding="2" });

答案 4 :(得分:1)

在C#3中为LINQ添加了匿名类型。当你只需要数据库中的一些属性时它们很棒,例如http://msdn.microsoft.com/en-us/library/bb397696.aspx


var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}


这只会从数据库中获取颜色和价格列:)

答案 5 :(得分:0)

您可以使用它来生成html元素。

下面的示例使用方法“el”生成具有给定属性和innerHTML的html元素。参数“params object [] objects”允许给出任意数量的匿名对象来定义所需的html属性。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace anonymousTypes
{
    class Program
    {
        static void Main(string[] args)
        {

            el("td", null, new { colspan = 36 }, new { style = "text-align: center;" });
            Console.Read();
        }

        static string el(string tagName, string innerHTML, params object[] objects)
        {
            StringBuilder b = new StringBuilder();
            b.Append("<").Append(tagName);
            foreach (object obj in objects)
            {
                foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
                {
                    Console.Write(propertyInfo.Name + " | " + propertyInfo.GetValue(obj, null) + "\n");
                }
            }
            b.Append(">");
            if (innerHTML != null)
                b.Append(innerHTML);
            b.Append("</").Append(tagName).Append(">");
            return b.ToString();
        }
    }
}