2009-02-01 9 views
1

Ces codes vraiment ennuyeux. Et Tostring() donne moi une erreur !!! Pouvez-vous réorganiser ces codes?Generics Liste avec Array retour mais comment?


    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] arraystr = { "yusuf", "mehmet" }; 
      Ilist myitems = new Ilist(arraystr); 

      SelectedItemsList slist = new SelectedItemsList(); 
      slist.Items.Add(myitems); 
      Console.Write(slist.Items[0].ToString()); 
      Console.ReadKey(); 
     } 
    } 
    public class Ilist 
    { 
     private string[] Ad; 

     public Ilist(string[] ad) 
     { 
      Ad = ad; 
     } 
     public override string[] ToString() 
     { 
      return this.Ad; 
     } 
    } 

    public class SelectedItemsList 
    { 
     public List<Ilist> Items; 

     public SelectedItemsList() 
     { 
      Items = new List<Ilist>(); 

     } 
    } 

erreur:

Generics_List_with_Class.Ilist.ToString(): type de retour doit être 'chaîne' pour correspondre membre surchargée 'Object.toString()'

+0

pas liée à la question à portée de main, mais je changerais le nom IList. Je [Quelque chose] implique que c'est une interface, ce qui n'est pas le cas.Il ressemble beaucoup trop à l'interface existante IList. – ICR

+0

http://msdn.microsoft.com/en-us/library/ms229043.aspx devrait aider à comprendre certaines des conventions de dénomination dans la langue. – ICR

Répondre

3

renommer Ilist.ToString() à ToStringArray(). Tous les objets ont une méthode ToString() mais vous la remplacez par une fonction avec un type de retour différent, provoquant votre erreur. IList n'est pas un bon nom pour une classe, car la convention dicate que les noms commençant par "I" devraient être des interfaces. Je recommande iList devrait ressembler à ceci:

public class StringList 
{ 
    private string[] Ad; 

    public StringList(string[] ad) 
    { 
     Ad = ad; 
    } 

    public string[] ToStringArray() 
    { 
     return this.Ad; 
    } 

    public override ToString() 
    { 
     return string.Join(",", Ad); 
    } 
} 

Mais pour être honnête, je vous recommande de fossé cette approche globale et regarder dans List à la place.

+0

Merci, mais pouvez-vous préciser vos conseils s'il vous plaît avec l'échantillon? PLease ... – Penguen

0

Si vous utilisez C# 3.0, vous pouvez utiliser les méthodes d'extension dans l'espace de noms System.Linq pour le rendre facile:

IList<string> list = new List<string>(); 
list.Add("item1"); 
list.Add("item2"); 
string[] array = list.ToArray(); 
0

Votre fonction ToString retourne un tableau de chaînes, alors que la méthode elle remplace de l'objet devrait renvoyer une seule chaîne.

De plus, en nommant votre classe IList ne suit pas les modèles classiques de conception de nommage des classes avec des noms « appropriés » (comme StringList), et préfixer interfaces avec un I.

Il est aussi probablement la peine d'avoir une liste assez qu'un tableau de chaînes comme Ad.

2

La méthode que vous remplacez a un type de chaîne de retour. Si vous substituez une méthode, sa signature de méthode (son type de retour, son nom et ses arguments) doit rester la même (bien, il y a des cas où elle peut être différente, mais pour l'instant supposer qu'ils devraient être identiques). Ainsi, votre méthode ToString() doit ressembler à ceci:

public override string ToString() 
{ 
    ... 
} 

Il est à vous de décider quelle est la meilleure représentation de chaîne est, mais si vous voulez utiliser ToString() il doit renvoyer une chaîne.

Comme Neil Barnwell suggests si vous avez réellement voulez juste retourner un tableau, vous pouvez renommer votre méthode actuelle à quelque chose comme:

public string[] GetItems() 
{ 
    return Ad; 
} 

ou si vous voulez une chaîne que vous pourriez faire votre méthode ToString quelque chose comme ceci:

public override string ToString() 
{ 
    StringBuilder stringBuilder = new StringBuilder(); 
    stringBuilder.Append("{ "); 
    stringBuilder.Append(string.Join(", ", Ad)); 
    stringBuilder.Append(" }"); 
    return stringBuilder.ToString(); 
} 

Selon que vous faites cela pour apprendre le C# ou que ce soit le code réel, je regardais:

List<string> list = new List<string>() 
{ 
    "yusef", 
    "mehmet", 
}; 

si vous utilisez C# 3.0, ou sinon:

List<string> myitems = new List<string>(); 
myitems.AddRange(arraystr); 
+0

Merci beaucoup! c'est vraiment m'aider! – Penguen