如何在C#中返回一个字符串列表

5

有人能告诉我如何存储和返回字符串列表吗?

我问这个问题是因为我编写了一个返回字符串集合的函数,并且我想为它准备一个COM,并需要在VC++中使用它来获取返回的字符串列表,以便我可以使用该字符串列表扩展一些功能。我希望这清楚明白。


请提供更多信息 - 是永久存储还是只是“构建一个列表/返回该列表”?“返回”像是方法的结果吗? - Thorsten Dittmar
4
你的意思非常不清楚;这可能是非常简单的事情,也可能是非常深奥的问题,具体取决于你的意图... - Marc Gravell
请提供更多输入,你想要实现什么? 伪代码可能有帮助。 - Dimi Takis
不清楚你面临的问题是什么。我建议你发布代码片段,让代码自己说明问题。 - Hemant
6个回答

16

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;
}

我也做了同样的事情。但是我为此准备了一个COM,并希望在C++中获取返回值,我必须在其中使用这些返回值。但是我遇到了错误,即GetCities(例如)不是相应接口的方法。请指导我解决这个问题。 - Cute

4
在C#中,你可以简单地返回List<string>,但你可能希望返回IEnumerable<string>,因为它允许进行惰性评估。

1
(只有在懒惰的数据源支持下,惰性求值才真正有用。) - Marc Gravell
@Marc:当然可以,但如果你返回List<string>,即使使用惰性源,也没有选项。 - Brian Rasmussen
1
@Marc - 或者如果您将来想要切换到懒惰源的选项 :) - Daniel Earwicker

3
您可以将一组固定的字符串存储为数组:
string[] myStrings = {"Hello", "World"};

或者一个动态列表,例如List<string>

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

2

在.NET中,表示字符串列表的方式有很多种,List<string>是最流畅的一种。然而,你不能将其返回给COM,因为:

  1. COM不理解.NET泛型

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

除非你想涉及到非常可怕的Variant SafeArray对象(不建议这样做),否则你需要创建一个“集合”对象,以便你的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

我因为提醒用户检查他们昨天所问的问题而被踩?太好了。 - Daniel Earwicker
我仍在尝试通过“COM”来完成这个任务。但我不确定我的方法是否正确。 - Cute

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接