私の知る限り、拡張メソッドのthis
はref
変数として渡されます。私は拡張メソッドとローカル 'this'変数
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();
マイList<int> ints
は今1, 2, 3, 4, 5, 0
で行うことでこれを確認することができます。私は
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);
を行う際
しかし、私は私のList<int> ints
は3, 4, 5
ことを期待したが手つかずのままでしょう。私は明白な何かを欠いていますか
、それは値渡し参照です。参照を渡すことで、呼び出し元メソッド内の変数が呼び出し先のエイリアスになります。これにより、呼び出し元メソッドに直接割り当てることができます。 – Lee
「渡す*参照」と「渡す* a *参照」には違いがあります。リストへの参照は値渡しです。つまり、リストにアクセスして変更することができますが、リストを参照している外部の変数には触れていません。 –
'(new List())。メソッド()' compiles =>引数は変数でなくてもよく、 'ref 'のようにはなりません。 –