Лучше ли выдавать возвратные списки поиска или предварительно загружать статический список в c #? - PullRequest
2 голосов
/ 26 августа 2009

У меня есть простой список поиска, который я буду использовать для заполнения раскрывающегося списка в Silverlight. В этом примере я использую штаты США.

Я пытаюсь выяснить, лучше ли возвращать статический список или использовать ключевое слово yield . Из следующих двух частей кода, который является предпочтительным и почему?

Версия 1: Использование доходности

public class States
{
    public static IEnumerable<string> GetNames()
    {
        yield return "Alabama"; 
        yield return "Alaska";
        yield return "Arizona";
        yield return "Arkansas";
        yield return "California";
        yield return "Others ...";
    }
}

Версия 2: Возврат списка

public class States
{
    private static readonly IList<string> _names;

    static States()
    {
        _names = new List<string>() {"Alabama", 
                                     "Alaska",
                                     "Arizona",
                                     "Arkansas",
                                     "California",
                                     "Others ..." };

    }

    public static IList<string> GetNames()
    {
        return _names;
    }
}

Ответы [ 4 ]

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

Вопрос, который вам нужно задать себе: «Хочу ли я, чтобы код, вызывающий GetNames, мог изменять список?»

  • Если ответ положительный, вернуть IList, неявно говоря: «чтение-запись»
  • Если ответ отрицательный, вернуть IEnumerable, неявно говоря: «только для чтения»

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

Вот что я бы сделал:

public static IEnummerable<string> GetNames()
{
    foreach(string name in _names) yield return name;
}

Таким образом, вы не можете напрямую выставлять список «внешнему миру»

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

Это может помочь объяснить, почему вы должны использовать V1 http://startbigthinksmall.wordpress.com/2008/06/09/behind-the-scenes-of-the-c-yield-keyword/

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

Я думаю, что предпочел бы список для этого. Единственное преимущество, которое может дать yield метод перед списком, - это отсутствие необходимости хранить все элементы в памяти одновременно, но вы все равно это сделаете.

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

Лично я бы предпочел List над итератором, хотя я бы также посмотрел на встраивание ресурса, содержащего такой список (возможно, XML, возможно, простой текст), в вашу сборку и прочитал бы это в вашем статическом конструкторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...