【问题标题】:Any way to check if a XmlSchemaParticle is an EmptyParticle?有什么方法可以检查 XmlSchemaParticle 是否为 EmptyParticle?
【发布时间】:2011-03-15 16:59:17
【问题描述】:

我在这里遇到了一些问题,是否有正确的方法来检查 XmlSchemaParticle 是否为 EmptyParticle

XmlSchemaParticle.EmptyParticle 似乎是XmlSchemaParticle 的私有内部类。

我现在正在做的是particle.GetType().Name == "EmptyParticle",我觉得它很丑。

还有其他选择吗?

【问题讨论】:

    标签: c# xml xsd


    【解决方案1】:

    我今天遇到了同样的问题。我可以通过检查XmlSchemaComplexType.ContentType 属性来解决它:

    public bool HasEmptyParticle(XmlSchemaComplexType type)
    {
        return type.ContentTypeParticle != null && type.ContentType == XmlSchemaContentType.Empty;
    }
    

    【讨论】:

    • 我认为你的答案是正确的......是的,因为它不完整 - 还为 XmlSchemaContentType.TextOnly 返回了一个空粒子。
    【解决方案2】:

    我尝试了与您相同的解决方案,但它很乱,好吧。刚要试试:http://www.c-sharpcorner.com/Forums/Thread/54685/detecting-xmlschemacomplextype-contentparticletype-is-equal.aspx

    【讨论】:

      【解决方案3】:

      我认为您应该将任何ContentTypeParticleMaxOccurs == 0 视为空。

      【讨论】:

      • 那么我不明白 EmptyParticle 类的目的。
      • EmptyParticle 是非公开的显然意味着它不是供外部使用的。无论他们在内部做什么(或不做什么)都不意味着XmlSchemaParticle 的用户知道。
      • 他们不应该返回那种类型的东西,你不觉得吗?
      • 嗯,从架构的角度来看,他们没有。只是他们出于某种内部原因使用该类,而 API 未反映这些原因。 API 的用户不应关心 XmlSchemaParticle 的确切实现,而应根据其公开的公共属性进行操作。
      • 顺便说一句,你的答案不正确,我得到了很多 EmptyParticleMaxOccurs > 0
      【解决方案4】:

      我知道这是旧的,但是如果您检查 ContentTypeParticle 是否不公开怎么办。

      如果 (!type.ContentTypeParticle.GetType().IsPublic) {

      }

      我知道您专门测试空,但我们可以假设内部/私有对象类型反映空吗?

      【讨论】:

      • 这比particle.GetType().Name == "EmptyParticle" 脏得多——也可能(而且肯定是)完全错误。没有什么告诉我EmptyParticle 是唯一的私有粒子类型。
      • 确实如此。只是试图避免针对内部类的名称进行测试,理论上它可能会改变。也不完全干净。
      猜你喜欢
      • 2011-01-17
      • 1970-01-01
      • 2010-09-30
      • 2013-01-18
      • 2015-08-19
      • 2018-01-31
      • 2016-07-20
      • 2020-04-19
      • 2013-01-13
      相关资源
      最近更新 更多