2009-04-21 3 views
8

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

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

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

+0

не могли бы вы добавить ссылку на эту статью? –

ответ

6

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

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

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

3

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

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

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

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

0

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

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

Взгляните на этот Introduction to LINQ

0

Here хороший блог Чарли Калверт о использовании типов Anonymous.

1

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

2

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()); 
} 

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

0

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

2

от лошади (от Microsoft) mouth:

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

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

Смежные вопросы