假设我们有一些代码
public class A { }
public class B : A { }
static void Main(string[] args)
{
A a1 = new A();
A a2 = new A();
A a3 = new A();
Process(ref a1);
Console.WriteLine(a1.GetType().Name == "B"); // show True : that i want
List<A> list = new List<A>();
list.Add(a2);
list.Add(a3);
ProcessList(ref list);
Console.WriteLine(a2.GetType().Name == "B"); // False : I want True
Console.WriteLine(a3.GetType().Name == "B"); // False : I want True
Console.Read();
}
static void ProcessList(ref List<A> list)
{
for (int i = 0; i < list.Count; i++)
{
list[i] = new B();
}
}
static void Process(ref A item)
{
item = new B();
}
如ProcessA方法中标记为 ref ,我可以将调用者(Main)的A
类型变量对象更改为B
类型。但就像那样,当我想处理 ProcessList 中的A
列表时,我无法将A
类型的调用者(Main)变量对象变为B
类型
似乎List<T>
确实通过引用传递了它的项目;或者我该如何实现这一目标?