匿名类型有哪些使用示例?

8

我已经阅读了一些关于如何在C#中创建匿名类型的文章。

这些东西有什么用途?对我来说,似乎这可能会使声明对象及其成员更加困难。

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


请问您能否添加那篇文章的链接? - Syed Tayyab Ali
7个回答

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()。重要的是,我可以聚合多个对象而不必定义中间变量。


3

我经常在数据绑定到复杂控件时使用它们,比如网格。

这为我提供了一种简单的方法来格式化我发送给控件的数据,使得控件更容易处理该数据的显示。

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

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

我还有一些情况(报告服务),需要使用非关系型数据进行加载,而报告服务要求数据是FLAT的!我使用LINQ/Lambda轻松地将数据扁平化。


2
LINQ/Lambda的
 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() );
}

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

2
从“马儿”(微软)的口中
匿名类型提供了一种方便的方式,可以将一组只读属性封装到一个对象中,而无需首先显式定义类型。
匿名类型在通常会使用定义的结构的领域中非常有用,但不希望这样做,因为它将仅在有限范围内使用。我倾向于将它们用作数据源或聚合(求和、计数等)值的容器。

1

我认为它们是简单结构对象的非常有用的替代品,特别是在使用VB.NET时,因为它不支持自动实现属性。


0

当使用LINQ时,它们非常有用。

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

看一下这个LINQ入门介绍


0

就我个人而言,我并不觉得匿名类型有太多用处。至少在使用时需要谨慎。它们通常用于创建返回多个值的LINQ查询,并且您只需要在函数执行期间利用查询到的数据。(如果需要在外部使用数据,则无法使用匿名类型 - 您需要声明自己的类型,这是出于良好的可读性考虑。)更一般地说,当使用普通的lambda表达式时,它们有时可能会有用,尽管我自己很少需要它们。(当我说需要时,根据上下文几乎总有替代方案,但是匿名类型有时确实是最优雅的选择。)如果您需要一个代码示例,请告诉我,我会尝试提供一个具有合理应用的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接