Essayer de renvoyer 2 valeurs de liste à partir d'une seule fonction

J'utilise ce code: -

public KeyValuePair<int, int> encrypt(string password)
    {
        List<int> key = new List<int>();
        List<int> code = new List<int>();
        /*
           do stuff, do some more stuff and go!
        */

        return new KeyValuePair<List<int>,List<int>>(key,code);
    }

Ici, j'essaye de renvoyer 2 valeurs List<int> mais une erreur se produit. Comment renvoyer 2 valeurs de liste à partir d'une seule fonction

MISE À JOUR

La réponse est trouvée, nous avons obtenu 2 bonnes réponses, c'est pourquoi je n'en ai pas choisi une car les deux fonctionnent très bien

Réponse de HadiRj

Réponse par Enigmativité

Et si vous voulez utiliser mon code alors, c'est la bonne version de celui-ci: -

public KeyValuePair<List<int>, List<int>> encrypt(string password)
    {
        List<int> key = new List<int>();
        List<int> code = new List<int>();
        /*
           do stuff, do some more stuff and go!
        */

        return new KeyValuePair<List<int>,List<int>>(key,code);
    }
4
AKC 26 déc. 2015 à 08:14

5 réponses

Meilleure réponse

Une manière assez intéressante de procéder dans ce cas est d'utiliser les paramètres out.

public void encrypt(string password, out List<int> key, out List<int> code)
{
    key = new List<int>();
    code = new List<int>();
    /*
       do stuff, do some more stuff and go!
    */
}
6
Enigmativity 26 déc. 2015 à 05:49

Changez votre fonction de décélération en

public KeyValuePair<List<int>, List<int>> encrypt(string password)

P.S: Je ne recommande pas cela! Créer une nouvelle classe est une meilleure idée pour gérer votre problème

3
HadiRj 26 déc. 2015 à 05:31

Voie 1: Tuple:

       public Tuple<List<int>, List<int>> func()
    {
        List<int> key = new List<int>() { 2,34,5};
        List<int> code = new List<int>() { 345,67,7};
        return Tuple.Create<List<int>,List<int>>(key, code);

    }

Voie 2:

Modèle de vue

    public class retViewModel
{
    public List<int> key { get; set; }
    public List<int> code { get; set; }
}



public retViewModel func()
        {
            List<int> key = new List<int>() { 2,34,5};
            List<int> code = new List<int>() { 345,67,7};
            retViewModel obj = new retViewModel() { 
            code=code,
            key=key
            };
            return obj;
        }
2
Psar Tak 26 déc. 2015 à 05:33
List<int> key;
List<int> code;
static void Main(string[] args)
        {
            key = new List<int>();
            code = new List<int>();
            encrypt("",ref key,ref code);
        }
  public void encrypt(string password, ref List<int> key, ref List<int> code)
        {

            /*
               do stuff, do some more stuff and go!
            */


        }
2
FatemehEbrahimiNik 26 déc. 2015 à 07:20

Vous pouvez toujours renvoyer un List<List<int>>. D'après ce que je peux voir dans votre code, la seule raison pour laquelle vous utilisez le KVP est que vous savez que vous allez avoir deux listes renvoyées. Ensuite, je dirais créer un autre objet dont vous pouvez avoir la clé et le code:

 public class EncryptionResult
 {
     public IList<int> Key {get; set;}
     public IList<int> Code {get; set;}
 }

Je ne vous recommande pas d'utiliser la solution out / ref suggérée par d'autres commentaires. Ce n'est pas une bonne pratique de les utiliser pour renvoyer plusieurs paramètres et ils doivent être évités. Aussi, si vous venez d'étendre / modifier cet objet à tout moment parce que vous avez besoin de plus de données différentes, vous n'avez pas besoin de changer la signature de votre interface, mais vous devez modifier chaque méthode et l'appelant si vous changez les paramètres nécessaires ( y compris tous vos tests).

2
Carlos Torrecillas 26 déc. 2015 à 13:38