簡體   English   中英

匿名類型的目的是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM