Как вернуть список строк в c #

2

Кто-нибудь может сказать мне, как хранить и возвращать список строк.

Меня спрашивают, потому что я написал функцию, которая возвращает Collection of string и i

хотите подготовить COM для этого и нужно использовать этот COM (чтобы получить возвращенный список) в

vС++, где я могу расширить некоторые функции, используя этот список строк.

Надеюсь, что все будет ясно...

Спасибо в Advance

  • 0
    Пожалуйста, предоставьте больше информации - хранить постоянно или просто «построить список / вернуть этот список»? «Возврат» вроде как результат метода?
  • 4
    Это действительно неясно, что вы имеете в виду; или это тривиально просто, или обманчиво глубоко, в зависимости от ваших намерений ...
Показать ещё 2 комментария
Теги:
visual-c++
com

6 ответов

11
Лучший ответ

Список <string> или строка [] - лучшие варианты.

Вот пример метода, который возвращает список строк:

public static List<string> GetCities()
{
  List<string> cities = new List<string>();
  cities.Add("Istanbul");
  cities.Add("Athens");
  cities.Add("Sofia");
  return cities;
}
  • 0
    Мне понравилось то же самое. Но я подготовил COM для этого и хочу получить возвращаемые значения That в c ++, где я должен использовать эти возвращенные значения. Но я получаю ошибку, что GetCities (как пример) не является методом соответствующего интерфейса. Направь меня, чтобы решить этот
3

В С# вы можете просто вернуть List<string>, но вместо этого вы можете вернуть IEnumerable<string>, поскольку это позволяет ленивую оценку.

  • 1
    (ленивая оценка действительно полезна, если поддерживается ленивым источником)
  • 0
    @Marc: Конечно, но если вы вернете List <string>, у вас не будет опции даже с ленивым источником.
Показать ещё 1 комментарий
3

Вы можете сохранить фиксированный список строк в виде массива:

string[] myStrings = {"Hello", "World"};

Или динамический список как List<string>:

List<string> myStrings = new List<string>();
myStrings.Add("Hello");
myStrings.Add("World");
2

Существует множество способов представления списка строк в .NET, List <string> будучи slickest. Однако вы не можете вернуть это сообщение COM, потому что:

  • COM не понимает .NET Generics

  • FxCop скажет вам, что плохая практика возвращает внутреннюю реализацию чего-то (List), а не абстрактного интерфейса (IList/IEnumerable).

Если вы не хотите попасть в действительно страшные объекты Variant SafeArray (не рекомендуется), вам нужно создать объект 'collection', чтобы ваш COM-клиент мог перечислять строки.

Что-то вроде этого (не скомпилировано - это просто пример, чтобы вы начали):

[COMVisible(true)]
public class CollectionOfStrings
{
  IEnumerator<string> m_enum;
  int m_count;

  public CollectionOfStrings(IEnumerable<string> list)
  { 
    m_enum = list.GetEnumerator();
    m_count = list.Count;
  }

  public int HowMany() { return m_count; }

  public bool MoveNext() { return m_enum.MoveNext(); }

  public string GetCurrent() { return m_enum.Current; }
}

(см. http://msdn.microsoft.com/en-us/library/bb352856.aspx для получения дополнительной справки)

1

Вчера вы спросили, как это сделать через COM-взаимодействие! Почему шаг назад?

Как вернуть коллекцию строк из С# в С++ через COM-взаимодействие

  • 0
    Я получаю отрицательный ответ за напоминание пользователю проверить вопрос, который они задали вчера ?! Отлично.
  • 0
    Тем не менее я пытаюсь сделать это через "COM". Но я знаю, что мой путь правильный или нет
0
public static IList<string> GetStrings()
{
  foreach( var item in GetStringItems())
  yield return item;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню