Каковы преимущества / недостатки присвоения имени одному или нескольким свойствам анонимного типа LINQ? - PullRequest
0 голосов
/ 01 марта 2020

В приведенном ниже примере я присвоил имя «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  ");
            }
        }
    }
}

1 Ответ

3 голосов
/ 01 марта 2020

Из Анонимные типы Спецификация

Если вы не укажете имена членов в анонимном типе, компилятор присваивает членам анонимного типа то же имя, что и свойство, используемое для инициализировать их. Вы должны предоставить имя для свойства, которое инициализируется с помощью выражения

Так что это просто удобство именования, ничего с точки зрения производительности. Вы указываете желаемое имя вместо исходного имени свойства.

В вашем коде это означает, что вы используете CustomerType имя Preferred свойства из исходного Customer объекта. Если вы напишите свое выражение Select следующим образом

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

Вы можете получить доступ к последнему свойству только по имени Preferred. Но вы должны указать имя, когда анонимный тип является результатом выражения, например

x => new
{
    x.Name,                              
    Count = x.Count() //will not compile without name
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...