Каковы некоторые примеры того, как анонимные типы полезны?

Предполагая, что K_1 и K_2 являются допустимыми ключами, должно существовать следующее:

gcd(K_1, φ(φ(N))=1 и gcd(K_2, φ(N))=1 где φ - функция Эйлера.

Учитывая это, мы знаем, что K_1 и K_2 должны быть нечетными . С информацией о том, что эти ключи отличаются только на 1 бит, мы знаем, что gcd(K_1, K_2)=1. Это означает, что существует r s, такой как rK_1 + sK_2 = 1 (определение gcd).

Мы знаем, что C_1 = E(M,K_1) и C_2 = E(M,K_2).

Давайте умножим C_1^r на C_2^s и посмотрим, что получим:

C_1^r * C_2^s = (M^K_1)^r * (M^K_2)^s = M^(rK_1 + sK_2) = M^1 = M

Мы нашли оригинальное сообщение M.

8
задан Mithrax 21 April 2009 в 20:38
поделиться

8 ответов

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

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

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

6
ответ дан 5 December 2019 в 12:12
поделиться

I often use them when databinding to complex controls -- like grids. It gives me an easy way to format the data I'm sending to the control to make the display of that data easier for the control to handle.

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

But, later on, after the code is stable, I will convert the anonymous classes to named classes.

I also have cases (Reporting Services) where I need to load them using non-relational data, and Reporting Services requires the data to be FLAT! I use LINQ/Lambda to flatten the data easily for me.

3
ответ дан 5 December 2019 в 12:12
поделиться

изо рта лошади (Microsoft) :

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

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

2
ответ дан 5 December 2019 в 12:12
поделиться

LINQ / Lambda

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

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

2
ответ дан 5 December 2019 в 12:12
поделиться

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

1
ответ дан 5 December 2019 в 12:12
поделиться

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

0
ответ дан 5 December 2019 в 12:12
поделиться

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

0
ответ дан 5 December 2019 в 12:12
поделиться

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

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

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

0
ответ дан 5 December 2019 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: