2016-08-29 5 views
-5

Ich bin neu in C# und ich lese jetzt über Generika-Funktionen. Aber ich kann nicht verstehen, was falsch ist? Ich habe zum Beispiel diese Funktion:Generische Funktion Rückkehr Liste C#

public List<T> CutText (List<T> list) 
{ 
     foreach (var a in list) 
     { 
       a.Text = "Yes"; 
     } 

     return list; 
} 
+0

Haben Sie die Fehlermeldung gelesen? Was denkst du ist "T"? – SLaks

+0

Lesen Sie diesen Link als Referenz: [Wie wird eine generische Auflistungssammlung in C# zurückgegeben?] (Http://stackoverflow.com/questions/1937301/how-to-return-a-generic-list-collection-in-c) . Grundsätzlich können Sie keine generischen Funktionsparameter und Rückgabetypen verwenden. Sie müssen entweder eine benutzerdefinierte Klasse deklarieren und diese verwenden oder eine String-Liste verwenden. Wenn Sie wollen, kann ich einige Beispiele als Antwort geben., –

+0

Name T konnte nicht gefunden werden –

Antwort

0

Was ist die Eigenschaft Text auf? Sie müssen eine Einschränkung definieren, damit das Generische weiß, was zu erwarten ist. Zum Beispiel ist die Schnittstelle ITextControl eine Schnittstelle im Webformular-Framework, und wenn Sie es wie folgt definieren, würde Ihr Code funktionieren.

public List<T> CutText<T>(List<T> list) 
    where T: ITextControl 

Aber Sie müssen definieren, wo das Generische verstehen kann. Ansonsten kann es nicht stark typisierter Code sein, wie Sie oben haben.

2
  1. Ihre Funktion ist nicht generisch. Dies ist nur eine ungültige nicht kompilierbare Funktion, die eine Liste eines unbekannten Typs T zurückgibt. Entweder muss Ihre Funktion oder Ihre Klasse in ihrer Deklaration auch <T> haben, um sie generisch zu machen.

    Zum Beispiel wie folgt aus:

    public List<T> CutText<T>(List<T> list) 
    { 
        foreach (var a in list) 
        { 
         a.Text = "Yes"; 
        } 
    
        return list; 
    } 
    
  2. Auch wenn Sie es als generische markieren, jetzt Typ T nicht Text Eigenschaft hat, bis T angegeben wird genauer durch eine Klasse oder Schnittstelle mit Text Eigenschaft:

    public List<T> CutText<T>(List<T> list) where T : TextBox 
    

    oder

    public List<T> CutText<T>(List<T> list) where T : IAnyInterfaceHavingTextProperty 
    
+0

Aus Neugier, warum der Downvote? Dies ist die richtige Antwort. – EJoshuaS

+0

Ich frage mich das gleiche auf Yeldar und meins ... –