2013-02-01 117 views
1

這種匿名類型如何在現實生活中有用?爲什麼它是好的?匿名類型,什麼時候有用?

// sampleObject is an instance of a simple anonymous type. 
var sampleObject = 
    new { FirstProperty = "A", SecondProperty = "B" }; 
+2

閱讀[查詢表達式中的匿名類型](http://blogs.msdn.com/b/charlie/archive/2007/09/26/choosing-not-to-use-anonymous-types-in- query-expressions.aspx) – horgh

+0

匿名意味着hte block不會有名字,一旦它有一個名字,它可以被多個線程按預期或意外的方式訪問。您仍然可以通過new訪問具有返回對象的成員。 –

+0

@BéCuSữa3你的意思是「類型」是什麼「塊」?而匿名類型與線程無關。另外,我不知道你最後一句話的含義。 – svick

回答

1

通常,當您使用匿名類型初始化變量,您變量聲明爲通過使用VAR的隱式類型的局部變量。類型名稱不能在變量聲明中指定,因爲只有編譯器可以訪問匿名類型的基礎名稱。有關var的更多信息,請參見Implicitly Typed Local Variables (C# Programming Guide)

3

從MSDN Anonymous Types (C# Programming Guide)

匿名類型典型地查詢 表達的選擇子句中用於從每一個對象中 源序列返回的屬性的子集。

...

最常見的情況是從其他類型 屬性初始化匿名類型。

有關其他信息,請參閱Anonymous Types in Query Expressions

另外,還要考慮讀SO What is the purpose of anonymous types?


考慮從How to: Join by Using Composite Keys (C# Programming Guide)一個例子:

var query = from o in db.Orders 
      from p in db.Products 
      join d in db.OrderDetails 
       on new { o.OrderID, p.ProductID } 
      equals new { d.OrderID, d.ProductID } 
      into details 
      from d in details 
      select new { o.OrderID, p.ProductID, d.UnitPrice }; 

這個例子說明如何進行加盟要在其中操作 使用一個以上的關鍵定義一個匹配。這是通過使用 複合鍵來完成的。您創建一個複合鍵作爲匿名類型或 命名鍵入您想要比較的值。


而使用匿名類型進行分組達拉封裝包含來自Group by Multiple Columns using Anonymous Types in LINQ to SQL多個值的鍵的示例:

var months = from t in db.TransactionData 
      group t by new { month = t.Date.Month, year = t.Date.Year } 
       into d 
      select new { t.Key.month, t.Key.year }; 

或尤爲明顯How to: Group Query Results (C# Programming Guide)

匿名類型因爲沒有必要使用完整對象來顯示結果

請注意,匿名類型的屬性成爲Key成員 上的屬性,並且可以在執行查詢時按名稱訪問。