2009-06-24 10 views
2

quelqu'un peut-il me dire comment stocker et retourner la liste des chaînes.Comment retourner la liste des chaînes dans C#

Je me demande parce que je l'ai écrit une fonction qui retourne la collection de chaînes et je

veulent préparer un COM pour que l'un et la nécessité de consommer que COM (pour obtenir la liste retournée) dans

vC++ où je peux étendre certaines fonctionnalités en utilisant cette liste de chaînes.

J'espère que Thius serait clair ...

Merci à l'avance

+0

S'il vous plaît fournir plus d'informations - stocker de façon permanente oder juste « construire une liste/retourner cette liste "? "Retour" comme le résultat d'une méthode? –

+4

On ne sait vraiment pas ce que vous voulez dire; Soit c'est trivial simple, ou trompeusement profond, selon votre intention ... –

+0

plus d'entrée s'il vous plaît, que voulez-vous atteindre? pseudo-code pourrait aider –

Répondre

11

List<string> ou string [] sont les meilleures options.

Voici un exemple de méthode qui retourne la liste des chaînes:

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

J'ai fait la même chose. Mais j'ai préparé un COM pour cela et je veux obtenir Cela retourne des valeurs dans C++ où je dois utiliser cette valeur retournée. Mais j'obtiens une erreur que GetCities (par exemple) n'est pas une méthode d'interface correspondante. Guide-moi pour résoudre celui-ci – Cute

3

Vous pouvez stocker une liste fixe de chaînes comme un tableau:

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

Ou une liste dynamique comme List<string>:

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

En C#, vous pouvez simplement retourner List<string>, mais vous voudrez peut-être ret urn IEnumerable<string> à la place car il permet une évaluation paresseuse.

+1

(l'évaluation paresseuse n'est vraiment utile que si elle est soutenue par une source paresseuse) –

+0

@Marc: Certainement, mais si vous retournez la liste vous n'avez pas l'option même avec une source paresseuse. –

+1

@Marc - ou si vous voulez l'option dans le futur de passer à une source paresseuse :) –

1

Hier, vous avez demandé comment faire cela via COM interop! Pourquoi le pas en arrière?

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

+0

Je reçois un downvote pour rappeler à l'utilisateur de vérifier la question qu'ils ont posée hier ?! Génial. –

+0

Encore j'essaye de faire celui-ci par "COM" .Mais je sais que mon chemin est corrct ou pas – Cute

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

Il y a plusieurs façons de représenter une liste de chaînes dans .NET, Liste < chaîne > étant le slickest. Cependant, vous ne pouvez pas revenir à ce COM parce que:

  1. COM ne comprend pas .NET Generics

  2. FxCop vous dira qu'il est une mauvaise pratique de retourner une mise en œuvre interne de quelque chose (List) plutôt qu'une interface abstraite (IList/IEnumerable).

Sauf si vous voulez entrer dans vraiment effrayant objets Variant SafeArray (non recommandé), vous devez créer un objet « de collection » afin que votre client COM peut énumérer les chaînes.

Quelque chose comme ça (non compilé - c'est juste un exemple pour vous aider à démarrer):

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

(Voir http://msdn.microsoft.com/en-us/library/bb352856.aspx for more help)

Questions connexes