хорошее имя для метода, который добавляет в контейнер, если не aleady там - PullRequest
1 голос
/ 04 августа 2009

Какое хорошее название для метода, который добавляет что-то в контейнер, если его там еще нет, т.е.

void AddCustomerToList(CustomerList list, Customer customer)

но это имя неправильно указывает на то, что оно не будет добавлено, если его там еще нет. Какое имя лучше? AddCustomerToListIfNotThereAlready? EnsureCustomerInList

Ответы [ 10 ]

6 голосов
/ 04 августа 2009

Измените CustomerList на CustomerSet, тогда это очевидно.

add(CustomerSet set, Customer customer);
4 голосов
/ 04 августа 2009

Я бы выбрал что-то вроде AddIfMissing, хотя мне нравится идея переименования в Set, поскольку это действительно так.

public static class ListExtensions
{
      public static void AddIfMissing<T>( this List<T> list, T item )
      {
            if (!list.Contains(item))
            {
                list.Add( item );
            }
      }
}
4 голосов
/ 04 августа 2009
bool TryAdd(CustomerList list, Customer customer)
4 голосов
/ 04 августа 2009

AddIfNotPresent

1 голос
/ 04 августа 2009

Обычно «put» используется вместо «add» для передачи этого, , но Я согласен с Чейзом, что вы должны просто вызвать это «add» и использовать «set» вместо «list». Если, конечно, контейнер не поддерживает обе операции (что было бы странно).

0 голосов
/ 04 августа 2009

Ты не сказал, что делаешь, если его там нет. Предполагая, что ответ «ничего», я бы пошел с.

bool InsertIfNew (CustomerList list, Customer customer)

Метод возвращает true, если он был «вставлен», и false, если он уже был там. Чтобы вызывающая сторона могла выполнять альтернативную логику, если запись уже была там. Возможно, вы не захотите этого делать, но кто-то может и у вас уже есть знания в рутине.

0 голосов
/ 04 августа 2009

Может быть, просто назовите его AddCustomerToList и не заставляйте его проверять, не существует ли он уже, вместо этого в конце вызовите другой метод RemoveMultipleOccurences (..).

0 голосов
/ 04 августа 2009

по-моему, вы задаете этот вопрос, так как вы разрабатываете ОО неоптимально:

void AddCustomerToList(CustomerList list, Customer customer)

ответственность за обеспечение присутствия клиента должна быть назначена CustomerList.

В этом случае вы называете свой метод:

  • Add в случае, если вы укажете в документации, что клиент будет добавлен, только если нет
  • AddIfNotPresent или PutIfNotPresent в противном случае.

Я предпочитаю последнее, так как оно более с автодокументами .

0 голосов
/ 04 августа 2009

Сделать это двумя способами. IsCustomerPresent () AddCustomer (). Затем, если хотите, вы можете создать метод AddCustomerIfNotAlreadyPresent (), который просто вызывает вашу слабо связанную логику.

0 голосов
/ 04 августа 2009

Вы можете сделать так, как это делает универсальный список , и создать функцию ContinsCustomer, чтобы проверить, существует ли она сначала, а затем использовать AddCustomerToList, если она возвращает false.

...