2012-01-26 1 views
2

У меня есть функция интерфейса, которая возвращает коллекцию IEnumerable<MyObject>.Самый дешевый способ сделать один объект Перечислимым?

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

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

public class SomeClass : IMyInterface 
{ 
    private MyObject _myObject; 

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

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

ответ

3

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

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

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

+1

+1: Это путь. –

+0

. Бесконечно благодарен. – GazTheDestroyer

0

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

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

Это ничем не отличается от того, что OP имеет в настоящее время. –