2009-04-21 92 views
8

我读过一些关于如何在C#中创建匿名类型的文章。什么是匿名类型如何有用的一些例子?

这些东西有什么用例?对我来说,似乎可能会让事情变得更难以理解声明对象及其内联成员。

什么时候使用匿名类型有意义?

+0

请问您可以添加该文章的链接吗? – 2009-04-21 20:41:24

回答

6

当我需要绑定到不完全符合我需要的集合时,我喜欢使用匿名类型。例如,这里是我的应用程序的示例:

var payments = from terms in contract.PaymentSchedule 
        select new 
        { 
         Description = terms.Description, 
         Term = terms.Term, 
         Total = terms.CalculatePaymentAmount(_total), 
         Type=terms.GetType().Name 
        }; 

在这里,然后绑定一个datagrid到payments.ToList()。这里的东西是我可以聚合多个对象而不需要定义一个intermidary。

3

我经常在数据绑定到复杂控件时使用它们 - 比如网格。 它给了我一个简单的方法来格式化我发送给控件的数据,使控件能够更轻松地显示数据。

GridView1.DataSource = myData.Select(x => new {Name = x.Description,Date = x.Date.ToShortDate()});

但是,稍后,在代码稳定后,我会将匿名类转换为命名类。

我也有,我需要他们使用非关系型的数据加载的情况下(报告服务),和Reporting Services要求数据为持平!我使用LINQ/Lambda为我轻松拼合数据。

0

他们使用LINQ

var query = from c in listOfCustomers 
      select new {FirstName = c.Name,c.City}; 

时是有用的看看这个Introduction to LINQ

0

Here是一个很好的博客文章由查理·卡尔弗特约匿名类型的用途。

1

我觉得他们是简单的结构/结构对象,一个非常有用的替代品,用VB.NET工作特别是因为它不支持自动实现的属性。

2

LINQ /λ的

var quantity = ... 
var query = db.Model.Select(m => new 
            { 
            Name = m.Name, 
            Price = m.Price, 
            Cost = M.Price * quantity 
            }); 
foreach (var q in query) 
{ 
    Console.WriteLine(q.Name); 
    Console.WriteLine(q.Price); 
    Console.WriteLine(q.Cost); 
} 

ASP.NET MVC -HtmlHelpers或返回JSON

<%= Html.TextBox("Name", Model.Name, new { @class = "required" }) %> 

public ActionResult SearchModels(var q, int limit) 
{ 
    var query = db.Models.Where(m => m.Name.StartsWith(q)) 
          .Take(limit) 
          .Select(m => new { m.DisplayName, m.Name, m.ID }); 

    return Json(query.ToList()); 
} 

时实际上,几乎任何地方,你只需要一个短暂的动作临时容器类型。

0

就个人而言,我没有发现匿名类型的很多用途。至少他们肯定要谨慎使用。通常使用它们的情况是在创建重新定义多个值的LINQ查询时,并且您只需要在该函数的持续时间内使用查询的数据。 (如果数据需要在外部使用,那么不能使用匿名类型 - 您需要声明自己的类型,并且有很好的理由,例如可读性。)更一般地说,使用纯lambda表达式时,它们有时可能很有用我自己也很少要求他们。 (当我说需要的时候,根据上下文有几乎不同的选择,但是有时候匿名类型实际上是最优雅的选择。)如果你想要一个代码示例,只需告诉我,我会尝试拿出一些合理体面的应用程序。

2

从马的(微软)mouth

匿名类型提供了一种方便 方式封装一组只读 性质的成单个对象 ,而不必首先明确地 定义类型。

匿名类型在通常使用已定义结构但不想使用的区域很有用,因为它只能在有限范围内使用。我倾向于将它们用作数据源或用作聚合(总和,计数等)值的容器。