[英]What is the purpose of anonymous types?
匿名類型的最佳用例是什么?
在我看來,它們僅在有限的情況下有用,例如一個 class 或一個 function。 它們幾乎不能在這個上下文之外使用,因為沒有反射沒有人會知道這些類型有哪些屬性可用。
匿名類型僅用於非常狹窄的范圍。 我用過的大多數用例涉及到Linq。
var result = from x in MyCollection
select new
{
x.Prop1,
x.Prop2
};
此外,在Linq to SQL的情況下 - 使用匿名類型將通過僅選擇匿名類型中使用的列來生成不同的SQL。 在上面的例子中(如果它是Linq to SQL查詢),它將生成類似“從mytable中選擇prop1,prop2”而不是選擇所有字段。
我從未遇到過(我)想要在我的代碼中聲明一個新的匿名類型的情況。 我想如果還有其他什么,也許這對本地常量很有用?
var x = new
{
FirstName = "Scott",
LastName = "Ivey"
};
但是,它不會停止,例如ASP.NET MVC團隊,您將它們用作Hashtable樣式的參數對象......
Url.Action(new{controller="Home", action="Index"})
但是,由於大量使用魔法弦,我不鼓勵這樣做。
我幾乎只在LINQ語句中使用匿名類型,在同一方法中迭代結果集。 這就是它們被引入的原因
我發現匿名類型有用的一個案例是將對象序列化為JSon並在ASP.NET MVC操作中返回它們。 您不一定要返回對象的所有屬性,匿名類型可以幫助您解決此問題。
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Person(int id)
{
Person person = manager.GetPersonById(id);
if(Request.IsAjaxRequest())
return Json(new {Name=person.Name, Age=person.Age,...});
else
...
}
它們在您想要對某些對象運行查詢然后對它們執行其他操作(如迭代)時非常有用。
例如:
var procs = System.Diagnostics.Process.GetProcesses().Select(p => new { p.Id, p.ProcessName});
foreach(var p in procs)
{
Console.WriteLine("{0}: {1}", p.Id, p.ProcessName);
}
我最近很幸運地遇到了DataGrids或DataViews中的字段,這些字段依賴於不再返回相同數據的查詢中的列。 例如,有時數據源被標准化或由於各種原因重命名字段。 使用LINQ查詢將匿名類型作為“前端”返回,我們能夠在生產中保留現有的網格。
正確; 它們僅在極端有限的范圍內實用。
C# dotnet 環境中的匿名類型有兩個用例:
1) Linq 查詢:
var myListSelectedProperties= myList.Select(x => new { x.prop1, x.prop2 });
上述內容很有用,因為我們不必為了查詢而編寫整個class 。
2) 在 Web 應用程序中返回視圖模型:
return Request.GetOKRequest(new { Message = "Hello" });
上述內容很有用,因為我們不必為了查詢而編寫整個class 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.