Je fais des recherches à ce sujet depuis un certain temps et je ne sais toujours pas comment le mettre en œuvre et quel est le meilleur moyen de renvoyer deux listes à partir d'une méthode distincte.
Je sais qu'il existe des questions similaires, mais elles semblent se contredire en ce qui concerne la meilleure façon de procéder. J'ai besoin d'une solution simple et efficace à mon problème ... Merci d'avance.
Il y a beaucoup de façons.
Retourne une collection des listes. Ce n'est pas une bonne façon de le faire, sauf si vous ne connaissez pas le nombre de listes ou s'il s'agit de plus de 2 ou 3 listes.
public static IEnumerable<List<int>> Method2(int[] array, int number)
{
return new List<List<int>> { list1, list2 };
}
Créez un objet avec des propriétés pour la liste et renvoyez-le:
public class YourType
{
public List<int> Prop1 { get; set; }
public List<int> Prop2 { get; set; }
}
public static YourType Method2(int[] array, int number)
{
return new YourType { Prop1 = list1, Prop2 = list2 };
}
Renvoyer un tuple de deux listes - particulièrement pratique si vous travaillez avec des tuples C # 7.0
public static (List<int>list1, List<int> list2) Method2(int[] array, int number)
{
return (new List<int>(), new List<int>());
}
var (l1, l2) = Method2(arr,num);
Tuples avant C # 7.0:
public static Tuple<List<int>, List<int>> Method2(int[] array, int number)
{
return Tuple.Create(list1, list2);
}
//usage
var Tuple = Method2(arr,num);
var firstList = Tuple.Item1;
var secondList = Tuple.Item2;
Je choisirais les options 2 ou 3 en fonction du style de codage et de la place de ce code dans le champ d'application le plus large. Avant C # 7.0, je recommanderais probablement l’option 2.
Si vous utilisez une version ultérieure de .NET et C #, utilisez simplement des n-uplets (vous devrez peut-être installer le package "System.ValueTuple")
public static void Method1()
{
int[] array1 = { };
int number1 = 1;
(List<int> listA, List<int> listB) = Method2(array1, number1);
}
public static (List<int>, List<int>) Method2(int[] array, int number)
{
List<int> list1 = new List<int>();
List<int> list2 = new List<int>();
return (list1, list2); //<--This is where i need to return the second list
}
Méthode 1
public static void Method2(int[] array, out List<int> list1, out List<int> list2, int number)
{
list1= new List<int>();
list2= new List<int>();
...
}
Méthode 2
public static Tuple<List<int>, List<int>> Method2(int[] array, int number)
{
list1= new List<int>();
list2= new List<int>();
...
return Tuple.Create(list1, list2)
}
Méthode 3
Créez une classe qui a 2 props list1, list 2, retournez cette classe ou retournez simplement un tableau de listes
et enfin sur le C # 7, vous pouvez simplement faire
public static (List<int> list1, List<int> list2) Method2(int[] array, int number)
{
...
return (list1, list2)
}
Vous devez transmettre les deux listes souhaitées en tant que référence à la fonction appelante. Par exemple
public static void Method1()
{
List<int> listA, listB;
Method2(array1, number1, ref listA, ref listB);
}
public static void Method2(int[] array, int number, ref List<int> listA, ref List<int> listB)
{
//...do stuff here
listA.Add(array[value]);
listB.Add(array[value]);
}
Vous pourriez envisager de structurer votre déclaration dans un tableau Two Dimensional Array . Il s’agit essentiellement d’une liste de listes pouvant être visualisée sous forme de graphique où chaque "coordonnée" contient une valeur.
Voici un exemple de création d'un tableau à 2 dimensions, ajoutant une valeur au point [0,2], puis obtenant sa valeur à partir de ce point et l'écrivant à l'écran:
double[,] myNumbers = new double[4, 3];
myNumbers[0, 2] = 21.2;
Console.WriteLine(myNumbers[0,2]);
Sortie: 21.2
Une meilleure pratique consiste à transmettre deux listes à la méthode de votre choix et à les initialiser/les assigner depuis la méthode elle-même ..
public static void Method2(int[] arr, List<int> list1, List<int> list2)
{
list1 = arr.OfType<int>().ToList();
list2 = arr.OfType<int>().ToList();
}