簡體   English   中英

為 LINQ 匿名類型的一個或多個屬性分配名稱有哪些優點/缺點?

[英]What are the advantages/disadvantages of assigning a name to one or more of the properties a LINQ anonymous type?

在下面的示例中,我已將名稱“CustomerType”分配給屬性 x.Preferred。

除了可能獲得可讀性之外,為屬性分配名稱是否有任何性能優勢/劣勢?

using System;
using System.Linq;

namespace ConsoleApp2
{
    public class Customer
    {
        public string Name { get; set; }
        public string ID { get; set; }
        public string Preferred { get; set; }

        // Constructor that takes one argument:
        public Customer(string _name, string _iD, string _preferred)
        {
            Name = _name;
            ID = _iD;
            Preferred = _preferred;
        }
        static void Main(string[] args)
        {
            Customer[] cust = new Customer[]
            {
                new Customer ("Mike", "1234", "Preferred"),
                new Customer ("Alice", "4321", "Preferred"),
                new Customer ("Susan", "3214", "Not Preferred"),
                new Customer ("David", "7538", "Preferred")
            };
            var customers = cust
                            .Where(x => x.Preferred == "Not Preferred")
                            .Select(x => new
                            {
                                x.Name,                              
                                x.ID,
                                CustomerType = x.Preferred            //  What are the advantages/disavantages of assigning the name "CustomerType" to this property?
                            });
            foreach (var customer in customers)
            {
                Console.WriteLine($"  Preferred Customer is {customer.Name}.  Customer ID  is {customer.ID}.   Customer is {customer.CustomerType}.\n  ");
            }
        }
    }
}

來自匿名類型規范

如果未在匿名類型中指定成員名稱,編譯器將為匿名類型成員提供與用於初始化它們的屬性相同的名稱。 您必須為使用表達式初始化的屬性提供名稱

所以,這只是命名方便,在性能方面沒有任何意義。 您指定所需的名稱而不是原始屬性名稱。

在您的代碼中,這意味着您正在使用來自原始Customer對象的Preferred屬性的CustomerType名稱。 如果你像這樣寫你的Select表達式

x => new
{
    x.Name,                              
    x.ID,
    x.Preferred
}

您只能通過Preferred名稱訪問最后一個屬性。 但是你必須指定名稱,當匿名類型是表達式的結果時,例如

x => new
{
    x.Name,                              
    Count = x.Count() //will not compile without name
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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