2016-11-17 1 views
-1

J'ai trouvé, que la constructionC# méthode d'initialisation sur la liste des paramètres ne fonctionne pas avec Toute suggestion Effacer()

Method(out List<T>list) 
{ 
    list.Clear();  // doesn't allowed to initialyze List<T>list 
    list = null;  // is accepted by VSTO, however, is not so good 
} 

s'il vous plaît?

+3

Les paramètres 'out' sont généralement pour les choses qui sont créées à l'intérieur de la méthode, pas pour modifier les choses passées dans le hotte. Peut-être que vous devriez utiliser 'ref'. Vous devez montrer le contexte dans lequel ce code sera utilisé. –

+0

Merci Mattew! En fait, je gère dans la méthode le champ de liste dans la classe, comme public Liste str = new Liste (); ... –

Répondre

3

Vous ne pouvez pas utiliser de paramètre non affecté avec cette méthode. Il y a une règle simple: utilisez out si le paramètre n'est pas initialisé ou utilisez ref si vous passez le paramètre initialisé à la méthode.

Ce code fonctionnera correctement:

void Method<T>(ref List<T> list) 
{ 
    list.Clear(); 
    list = null; 
} 

En savoir plus sur Différencies dans cette question: What's the difference between the 'ref' and 'out' keywords?

2

Si vous souhaitez utiliser out sémantique, pas ref, vous devez instancier votre liste:

Method(out List<T>list) 
{ 
    list = new List<T>(); 
}