Каковы некоторые примеры того, как анонимные типы полезны? - PullRequest
8 голосов
/ 22 апреля 2009

Я прочитал несколько статей о том, как создавать анонимные типы в C #.

Какие варианты использования для этих вещей? Мне кажется, что это может усложнить понимание объявления объектов и их элементов в строке.

Когда имеет смысл использовать анонимные типы?

Ответы [ 8 ]

6 голосов
/ 22 апреля 2009

Мне нравится использовать анонимные типы, когда мне нужно привязать коллекцию, которая не совсем соответствует тому, что мне нужно. Например, вот пример из моего приложения:

    var payments = from terms in contract.PaymentSchedule
                   select new
                   {
                       Description = terms.Description,
                       Term = terms.Term,
                       Total = terms.CalculatePaymentAmount(_total),
                       Type=terms.GetType().Name
                   };

Здесь я затем привязываю сетку данных к платежам. ToList (). Дело в том, что я могу объединять несколько объектов без единого определения промежуточного звена.

3 голосов
/ 22 апреля 2009

Я часто использую их при привязке данных к сложным элементам управления - например, к сеткам. Это дает мне простой способ форматирования данных, которые я отправляю элементу управления, чтобы упростить отображение этих данных для элемента управления.

GridView1.DataSource = myData.Select (x => new {Name = x.Description, Date = x.Date.ToShortDate ()});

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

У меня также есть случаи (службы Reporting Services), в которых мне нужно загружать их с использованием нереляционных данных, а службы Reporting Services требуют, чтобы данные были FLAT! Я использую LINQ / Lambda, чтобы легко сгладить данные для меня.

2 голосов
/ 22 апреля 2009

от лошади (Microsoft) пасть :

Анонимные типы предоставляют удобный способ инкапсулировать набор только для чтения свойства в один объект без необходимости сначала явно определить тип.

Анонимные типы полезны в областях, где вы обычно используете определенную структуру, но не хотите, потому что она будет использоваться только в ограниченной области. Я склонен использовать их в качестве источников данных или в качестве контейнеров для совокупных (сумма, количество и т. Д.) Значений.

2 голосов
/ 22 апреля 2009

LINQ / лямбда в

 var quantity = ...
 var query = db.Model.Select( m => new
                                  {
                                    Name = m.Name,
                                    Price = m.Price,
                                    Cost = M.Price * quantity
                                  } );
 foreach (var q in query)
 {
     Console.WriteLine( q.Name );
     Console.WriteLine( q.Price );
     Console.WriteLine( q.Cost );
 }

ASP.NET MVC -HtmlHelpers или при возврате JSON

<%= Html.TextBox( "Name", Model.Name, new { @class = "required" } ) %>

public ActionResult SearchModels( var q, int limit )
{
     var query = db.Models.Where( m => m.Name.StartsWith( q ) )
                          .Take( limit )
                          .Select( m => new { m.DisplayName, m.Name, m.ID } );

     return Json( query.ToList() );
}

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

1 голос
/ 22 апреля 2009

Я считаю, что они являются очень полезной заменой для простых объектов структуры / структуры, особенно при работе с VB.NET, поскольку он не поддерживает автоматически реализуемые свойства.

0 голосов
/ 22 апреля 2009

Лично я не нахожу особого смысла для анонимных типов. Они, безусловно, должны использоваться с крайней осторожностью. Ситуация, в которой они обычно используются, возникает при создании запросов LINQ, которые возвращают несколько значений, и вам нужно использовать запрашиваемые данные только для выполнения функции. (Если данные должны использоваться снаружи, тогда анонимные типы не могут использоваться - вам нужно объявить свои собственные, и по уважительной причине, например, читаемость.) В более общем случае они иногда могут быть полезны при использовании простых лямбда-выражений, хотя опять я сам требовал их очень редко. (Когда я говорю «требуется», есть почти альтернативные варианты в зависимости от контекста, но иногда анонимные типы на самом деле являются наиболее элегантным вариантом.) Если вы хотите пример кода, просто дайте мне знать, и я ' попробую придумать что-нибудь с довольно приличным приложением.

0 голосов
/ 22 апреля 2009

Здесь - хорошее сообщение в блоге Чарли Калверта об использовании анонимных типов.

0 голосов
/ 22 апреля 2009

Они полезны при использовании LINQ

var query = from c in listOfCustomers
            select new {FirstName = c.Name,c.City};

Взгляните на это Введение в LINQ

...