2015-12-17 4 views
-8

У меня есть функция, возвращающая мне объект типа Person.Как преобразовать объект в IEnumerable этого объекта

Теперь мне нужно вызвать другую функцию, которая принимает тип IEnumerable<Person>. Как это сделать, пожалуйста?

Эта функция ниже возвращает мне Личность.

var objA = Service.GetAll(obj); 

нужно вызвать другой метод, который заключается в следующем

var result = Service.Get(AR<IEnumerable<Person>> name, type) 

я указал имя как IEnumerable<Person>, потому что он принимает этот тип.

РЕДАКТИРОВАТЬ

Мой второй метод принимает это в качестве типа параметра.

AR<IEnumerable<Person>> 

Во всех других местах мой первый метод возвращает AR<Ienumerable<person>>, но в одном случае она возвращает AR<Person>. Теперь мне нужно нужно сделать его как список т.е. AR<IEnumerable<Person>>, так что я могу использовать второй метод как

+1

ли вы имеете в виду вы хотите передать, что человек к способу, которые принимают 'IEnumerable ' в качестве параметра? 'var p = f1();' then call 'f2 (new Person [] {p});' Это то, что вы ищете? –

+0

@RezaAghaei: Нет, я ищу что-то вроде IEnumerable должен передаваться как параметр для второй функции, в то время как я получаю Person как возвращаемое значение в первой функции – Learner

+0

Так что мой ответ правильный :) –

ответ

1

Вы можете создать новый экземпляр List<Person> так List<T> реализует IEnumerable. https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx

Итак:

var person = FunctionThatGetsPerson(); 
List<Person> personList = new List<Person> { person }; 
FunctionThatTakesEnumerable(personList); 

public void FunctionThatTakesEnumerable(IEnumerable<Person> personList) 
{ 
    // 
} 
+0

ваш кажется легким, но он говорит, что у него неверный аргумент в строке personlist. – Learner

+0

Является ли человек объектом типа 'Person'? – Steve

+0

Не лучше ли было бы создать встроенный массив? 'FunctionThatTakesEnumerable (новое лицо [] {person});' – Puddler

4

В этих редких случаях я использую метод расширения, как это:

public static IEnumerable<T> YieldMe<T>(this T obj) 
{ 
    yield return obj; 
} 
+0

проклятый, он говорит, что тип пространства имен T не удалось найти, если вам не хватает сборки ref: S – Learner

+0

Покажите, что вы сделали. –

+0

@Deevinee 'T' является общим, поэтому вы можете заменить его на свой объект' Person' – Steve

1

Всего use

Enumerable.Repeat(objA, 1); 

Repeat возвращается именно то, что вам нужно.

+0

Ошибка времени компиляции – Learner

+0

@Deevinee [Repeat returns] (https: // msdn .microsoft.com/библиотека/bb348899 (v = VS.100) .aspx) именно то, что вам нужно –

+0

Mate, как его использовать? – Learner

2

Я ищу что-то вроде IEnumerable<Person> должен быть принят в качестве параметра второй функции в то время как я получаю Person в качестве возвращаемого значения в первой функции

Таким образом, вы можете использовать такой код :

/*while I get Person as return value in first function*/ 
Person p = FirstMethod(); 

/*IEnumerable<Person> should be passed as a parameter to second function*/ 
SecondMethod(new Person[] { p }); 

В то время как подпись второго метода может быть void SecondMethod(IEnumerable<Person> x)

+0

извините, ваша первая строка сама выбрасывает ошибку – Learner

+0

Как этот ответ может быть опущен вниз? Хотя он делает то, что вы точно описали? –

+0

Реза, извините, я не спустил вниз. На самом деле вы пытались мне помочь. На самом деле я не спустил вниз, но, к сожалению, этот фрагмент кода не помогает – Learner

2

Простой способ начать с:

public Person GetPerson() 
{ 
    return new Person() 
} 

и добавить:

public IEnumerable<Person> GetPeople() 
{ 
    return new [] { GetPerson() }; 
} 
+1

Тупой инструмент массива с одним элементом вероятно, лучший ответ здесь. Создание конечного автомата с помощью 'yield' для ответа на эту проблему кажется несколько длинным в сравнении. – spender

+0

Didn». t помочь мне. Мое требование простое, оно должно принимать AgentResult > как ввод второй функции, в то время как я получаю Person как вывод первой функции. – Learner

+0

@ Deevinee - Я ответил на ваш вопрос так же, как и у вас. Теперь вы отредактировали свой вопрос. Пожалуйста, помните об этом. Я посмотрю, смогу ли я обновить, но вам нужно опубликовать [mcve], если вы ожидаете хороших ответов. – Enigmativity