【发布时间】:2024-01-22 06:22:01
【问题描述】:
我有一些使用 .NET 框架中的 Xml.Schema 类遍历 XML 模式的 C# 代码。各种简单类型限制在框架中被抽象为从 Xml.Schema.XmlSchemaFacet 派生的一大堆类。除非我遗漏了某些东西,否则要知道给定 facet 是哪种派生 facet 类型的唯一方法是将其推测性地转换为其中一个,在失败的情况下捕获结果 InvalidCastOperation。这样做会给我留下一个非常丑陋的功能:
private void NavigateFacet(XmlSchemaFacet facet)
{
try
{
handler.Length((XmlSchemaLengthFacet)facet);
}
catch(InvalidCastException)
{
try
{
handler.MinLength((XmlSchemaMinLengthFacet)facet);
}
catch(InvalidCastException)
{
try
{
handler.MaxLength((XmlSchemaMaxLengthFacet)facet);
}
catch(InvalidCastException)
{
...
}
}
}
}
我认为必须有更优雅的方法来做到这一点;要么使用我在 .NET 框架中遗漏的一些属性,要么使用一些巧妙的 OO 技巧。谁能赐教?
【问题讨论】:
标签: c# .net refactoring xsd try-catch