salut:
peut on faire :
List<ref maclass> malist;
salut:
peut on faire :
List<ref maclass> malist;
Non, et ça n'aurait pas vraiment de sens. C'est dans des méthodes qu'on peut passer des paramètres par référence. Que cherches-tu à faire ?
utiliser une liste sans la copié
Les listes sont des types références, donc l'objet liste est lui-même passé par référence, il n'y a pas de copie si tu ne la fais pas toi-même.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 static void Main(string[] args) { var list = new List<string>(); Console.WriteLine(list.Count); // 0 AddItems(list); Console.WriteLine(list.Count); // 3 } static void AddItems(List<string> listParam) { listParam.Add("a"); listParam.Add("b"); listParam.Add("c"); }
question pas très claire
si tu as une list contenant 800 objets, en fait ce sont 800 pointeurs vers les objets que tu as dedans (un pointeur étant 32 ou 64bits)
et il y a 800 objets en mémoire ailleurs
si tu fais
ici seul le pointeur de la list est recopié (donc moins de 10 octets)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 var a = new list<object>(); // + 800x .Add() var b = a;
si tu fais une copie de la list (basiquement avec .ToList() ou moins basiquement avec plein d'autres choses) ce sont les 800 pointeurs qui sont copiés
mais ca a l'avantage de pouvoir traiter indépendamment les 2 collections
dans certains cas pour éviter une recopie de x pointeurs pour obtenir tout ou partie d'une collection il y a le type Span<T> qui doit se trouver en package nuget, j'ai cru comprendre qu'il n'était pas réservé à .net Core
merci,
donc :
1-ref n'est pas un type
2-une collection peut etre réferencée par son nom sans recopier les Datas qui y sont stockés.
3- Span<int> span = mylist=list<object>();
4-pourquoi on dit : il n' y a pas de comparaison avec les pointeurs en C++
Partager