public override object Clone() { var newMixin = (ShaderMixinSource)MemberwiseClone(); newMixin.Compositions = Compositions == null ? null : ToSortedList(Compositions.Select(x => new KeyValuePair<string, ShaderSource>(x.Key, (ShaderSource)x.Value.Clone()))); newMixin.Mixins = Mixins == null ? null : Mixins.Select(x => (ShaderClassCode)x.Clone()).ToList(); newMixin.Macros = Macros == null ? null : new List<ShaderMacro>(Macros.ToArray()); return newMixin; }