2013-10-09 7 views
1

Я работал над некоторым кодом и начал использовать Tuple только для того, чтобы немного хранить некоторые данные до тех пор, пока некоторые другие функции не будут обработаны, а затем я использую список Tuple в списке, чтобы получить некоторую информацию от него и отправить по электронной почте, например:Использование Tuples эффективно для хранения объектов

List<Tuple<Customer, Contact, Product>> tupleInfo = 
    new List<Tuple<Customer, Contact, Product>>(); 

Затем я добавить различные объекты к нему путем вызова метода, где я прохожу клиентов, контакт и продукт:

Tuple<Customer, Contact, Product> info = 
     new Tuple<Customer, Contact, Product>(myCustomer, myContact, myProduct); 

info.Add(info); 

в конце после того, как я обрабатываю все мои вещи в других методах этот список будет содержать максимум 10 кортежей, которые я тогда послать метод, который отправляет по электронной почте, что-то вроде этого:

private ActionResult SendEmails(List<Tuple<Customer, Contact, Product> list) 
{ 
    ActionResult result = new ActionResult; 
     foreach(Tuple<Customer, Contact, Product> info in list) 
     { 
      //Here i just grab some the information 
      //from each tuple, email, product,contact 
      //contact info and customer info and send 
      //a personalized email, then do the same with the next records 
     } 
    return result; 
} 

Мой вопрос, насколько эффективно это, это нормально использовать кортежи так ?, я торговал производительность с помощью кортежей?

Я новичок в этом, поэтому хотел бы знать, прежде чем делать это неправильно.

+0

Отсутствие торговли производительностью ... но кортежи ИМО следует в первую очередь объявлять и использовать близко друг к другу; редко обмениваются между типами в одной и той же сборке и почти никогда не возвращаются из API, потребляемого другими. Это особенно верно для типов, которые могут быть легко назначены друг другу (например, Tuple ... нет безопасности времени компиляции, членом которой является, а имена членов - это только 'Item1', Item2', 'Item3', поэтому очень легко сделать ошибку). Для моего собственного здравомыслия я обычно предпочитаю внутренние занятия. –

+0

Спасибо за ввод, основываясь на вашем опыте или знаниях. Можно ли сказать, что в том, как я использую его выше, все в порядке? – user710502

+0

Да, это выглядит хорошо, поскольку похоже, что вы используете его как внутреннюю структуру для удобства. Вы, конечно же, не потеряете производительность, используя кортеж; есть [ничего особенного] (http://stackoverflow.com/a/3089883/453277) (хорошо или плохо) о них в C#. –

ответ

1
" started using Tuple just to hold some data for a bit " 

Если это причина, то нет вреда при использовании кортежей.

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

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

Но также помните одно, не рекомендуется использовать функцию, возвращаемый тип которой равен TUPLE. Это не имеет никакого смысла.

Например, функция которого возвращаемый тип EmailContent более четче, чем функция, тип возврата является кортеж с некоторой подписью как Tuple<string,int,bool,string,string>

Лично я хотел бы использовать Tuples в некоторых частных членов или для некоторых сценариев, в которых они имеют более короткие сроки жизни и не подлежат повторному использованию.

Итак, в этом случае, если вы думаете, «holding some data for a bit», это нормально.

1

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

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