Как вернуть список строк в c # - PullRequest
2 голосов
/ 24 июня 2009

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

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

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

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

Я надеюсь, что это будет ясно ...

Заранее спасибо

Ответы [ 6 ]

11 голосов
/ 24 июня 2009

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

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

public static List<string> GetCities()
{
  List<string> cities = new List<string>();
  cities.Add("Istanbul");
  cities.Add("Athens");
  cities.Add("Sofia");
  return cities;
}
3 голосов
/ 24 июня 2009

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

3 голосов
/ 24 июня 2009

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

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

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

List<string> myStrings = new List<string>();
myStrings.Add("Hello");
myStrings.Add("World");
2 голосов
/ 24 июня 2009

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

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

  2. 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 голос
/ 24 июня 2009

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

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

0 голосов
/ 24 июня 2009
public static IList<string> GetStrings()
{
  foreach( var item in GetStringItems())
  yield return item;
}
...