Nach meinem Wissen this
in einer Erweiterung Methode als ref
Variable übergeben wird. Ich kann dies überprüfen, indemErweiterungsmethode und lokale 'diese' Variable
public static void Method<T>(this List<T> list)
{
list.Add(default(T));
}
List<int> ints = new List<int>(new int[] { 1, 2, 3, 4, 5 });
ints.Method();
Mein List<int> ints
tun jetzt 1, 2, 3, 4, 5, 0
ist.
aber wenn ich
public static void Method<T>(this List<T> list, Func<T, bool> predicate)
{
list = list.Where(predicate).ToList();
}
List<int> ints = new List<int>(new int[] { 1, 2, 3, 4, 5 });
ints.Method(i => i > 2);
würde ich meine List<int> ints
erwarten 3, 4, 5
zu sein, aber bleibt unberührt. Fehle ich etwas Offensichtliches?
'list' nicht als Referenz übergeben wird, es ist eine Referenz von Wert übergeben
Also in Ihrem zweiten Fall sollten Sie verwenden. Alias-Referenz gibt die Variable in der aufrufenden Methode innerhalb des Aufrufers an, die Sie direkt zuweisen können. – Lee
Es gibt einen Unterschied zwischen "Übergabe * durch * Referenz" und "Weitergabe * a * Referenz". Der Verweis auf die Liste wird als Wert übergeben, dh Sie können auf die Liste zugreifen und sie ändern, aber Sie berühren nicht die externe Variable, die ebenfalls auf die Liste verweist. –
'(neue Liste()). Methode()' compiles => Argument muss überhaupt keine Variable sein => nicht wie 'ref'. –