我有一个要求,我需要获得以下类型
public class Class1
{
}
public class Class2 : Class1
{
}
public class Class3 : Class1
{
}
我可以在目标程序集上调用Assembly.GetTypes()并添加从Class1派生的所有类。我订购类型,以便下次使用该订单。 该顺序对于内部序列化和反序列化至关重要,因为内部引擎依赖于类型的索引而不是类型名称。我无法改变序列化引擎。
如果以后新的Class4派生自Class1,那么它应该在Class3之后的顺序。
我无法想到一个可行的解决方案。
是的,我需要维护一个xml文件,其中保存了类型的顺序,如果遇到新类型,是否应该在xml的末尾添加?
请帮忙
答案 0 :(得分:1)
您可以为订购创建任何自定义规则:例如。模式为{ClassName}{Index}
[Fact]
public void Test()
{
Type baseClass = typeof(Class1);
var result = (from type in Assembly.GetExecutingAssembly().GetTypes()
where type.IsSubclassOf(baseClass)
let index = Regex.Match(type.Name, @"\d+$")
where string.IsNullOrWhiteSpace(index.Value) == false
select new ResultItem { Index = int.Parse(index.Value), Type = type })
.OrderBy(x=>x.Index)
.ToList();
result.ForEach(Console.WriteLine);
}
public class Class1
{
}
public class Class2 : Class1
{
}
public class Class3 : Class1
{
}
private sealed class ResultItem
{
public int Index { get; set; }
public Type Type { get; set; }
public override string ToString()
{
return string.Format("Index: {0}, Type: {1}", Index, Type.Name);
}
}
结果输出:
Index: 2, Type: Class2
Index: 3, Type: Class3
因此,您可以添加任何新类。