如何在c#中返回字符串列表

时间:2009-06-24 07:15:24

标签: c# visual-c++ com

任何人都可以告诉我如何存储和返回字符串列表。

我被问到这是因为我写了一个函数,它返回字符串集合和我

想要为那个准备一个COM,并且需要在

中使用该COM(以获取返回的列表)

vc ++我可以使用该字符串列表扩展一些功能。

我希望thius能够清楚......

先谢谢

6 个答案:

答案 0 :(得分:11)

List<string>或string []是最佳选择。

以下是返回字符串列表的示例方法:

public static List<string> GetCities()
{
  List<string> cities = new List<string>();
  cities.Add("Istanbul");
  cities.Add("Athens");
  cities.Add("Sofia");
  return cities;
}

答案 1 :(得分:3)

您可以将固定的字符串列表存储为数组:

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

或动态列表为List<string>

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

答案 2 :(得分:3)

在C#中,您只需返回List<string>,但您可能希望返回IEnumerable<string>,因为它允许进行延迟评估。

答案 3 :(得分:2)

有很多方法可以表示.NET中的字符串列表,List&lt; string&gt;是最狡猾的。但是,您无法将此返回给COM,因为:

  1. COM不了解.NET Generics

  2. FxCop会告诉你,返回某个内部实现(List)而不是抽象接口(IList / IEnumerable)是不好的做法。

  3. 除非你想进入真正可怕的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 for more help

答案 4 :(得分:1)

昨天你问过如何通过COM互操作来做到这一点!为什么退步?

How to return a collection of strings from C# to C++ via COM interop

答案 5 :(得分:0)

public static IList<string> GetStrings()
{
  foreach( var item in GetStringItems())
  yield return item;
}