Самый дешевый способ сделать один объект Enumerable? - PullRequest
2 голосов
/ 26 января 2012

У меня есть интерфейсная функция, которая возвращает коллекцию IEnumerable<MyObject>.

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

В настоящее время я просто создаю System.Array следующим образом:

public class SomeClass : IMyInterface
{
    private MyObject _myObject;

    public IEnumerable<MyObject> IMyInterface.GetMyObjects()
    {
        return new MyObject[] { _myObject };
    }
}

Мне просто интересно, есть ли более эффективный способ или какая-нибудь магия для приведения самого объекта в действие?

Ответы [ 2 ]

3 голосов
/ 26 января 2012

Вы можете просто ...

public IEnumerable<MyObject> IMyInterface.GetMyObjects()
{
    yield return _myObject;
}

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

0 голосов
/ 26 января 2012

Я считаю, что следующее должно быть значительно дешевле:

public IEnumerable<MyObject> IMyInterface.GetMyObjects()
    {
        return new MyObject[1] { _myObject };
    }
...