2009-04-21 77 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

匿名類型提供了一種方便 方式封裝一組只讀 性質的成單個對象 ,而不必首先明確地 定義類型。

匿名類型在通常使用已定義結構但不想使用的區域很有用,因爲它只能在有限範圍內使用。我傾向於將它們用作數據源或用作聚合(總和,計數等)值的容器。