namespace FXTest
{class Program{static void Main(string[] args){List<Ast> l1 = new List<Ast>();List<IAst> l2 = new List<IAst>();l1.Add(new Ast());l2.Add(new Ast());l1[0].id = 2;//报错}}interface IAst{}struct Ast:IAst{public int id;}
}
以上在修改Ast中的id错误的原因是因为Ast是struct值类型,当你在修改id的时候实际上修改的是它的副本;将Ast修改为引用类型的class即可。
并且l2添加的时候性能消耗更小,因为l1在添加的时候会引发拆箱操作(struct是值类型)。
l1.Add(new Ast());
l2.Add(new Ast());