-2

背景信息:使用 VS10 在 C# .NET 2.0 中工作。

我正在调用一个 web 服务,它会返回一些东西作为响应,其中之一是StatesStates又是一个State数组。每个州都有几个属性,有些可以为空。我有兴趣隔离第三个属性Type。Type 是ObjectType 类型,它可以是多种事物,其中之一是“Article”。这实际上有点奇怪,因为我不确定ObjectType是什么类型(定制)。在 Web 服务界面,它被定义为“Choice of”......“”,“Article”,“video”等......但是当我调用它并检查 xml 响应的日志时,我看到了什么我想这样写:

   <Type>Article</Type>

这让我对 State.Type 中实际包含的内容感到困惑:

  -<States>
       -<State>
             <Id>1</Id>
             <Name>Personal</Name>
             <Type>Article</Type>
        </State>
        ....
   </States>

所以我想为每个单独的州(在州内)运行数组并检查它是否是“文章”。

 string stateID = null;

 myWebServer.State oneoftheStates = null; 

      for (int i = 0; i < objInfo.States.Length; i++) 
      {
          oneoftheStates = objInfo.States[i];
            if (oneoftheStates.Type == "Article") //This is the problem!!!
            {
               statusID = oneoftheStates.Id; 


                break; // found it!

            }
        }

现在的问题:

我应该使用什么来代替“文章”,因为“”引号不起作用,并且文章本身不起作用等等。使用 IF 在这里完成的方式,我收到错误“操作员 == 不能应用于 ObjectType 和 'char' 类型的操作数。还会出现“字符文字中的字符过多”错误。

额外信息(编辑)

<complexType name="State">
   <all>
      <element name="Id" type="xsd:string"/>
      <element name="Name" type="xsd:string" nillable="true"/>
      <element name="Type" type="tns:ObjectType" nillable="true"/>
      <element name="Produce" type="xsd:boolean" nillable="true"/><!-- If true for layouts, output will be send if set in featurelist -->
      <element name="Color" type="tns:Color" nillable="true"/>
      <element name="DefaultRouteTo" type="xsd:string" nillable="true"/><!-- default route to for this status, returned by server, no need to send as client -->
    </all>     
  </complexType>

有人可以帮我吗?

4

2 回答 2

1

这是您的来源的一些更好的示例,我认为这就是您想要的。

string stateId = null;

        var states = new string[] { "bla", "bla2", "bla3" };

        for (int i = 0; i < states.Length; i++)
        {
            var stateType = states[i]; // get property by doing .Type;
            if (stateType == "Article")
            {
                stateId = states[i]; // get the Id by doing .Id;
                break;
            }
        }

使用 foreach 代替 for 可能更好,因为这样更容易阅读。

于 2012-09-13T13:30:45.053 回答
0

好吧,我想通了。当我使用命令提示符手动运行 wsdl 时,我得到了生成的 .cs 代码。在那里,我可以看到我眼中的类型,仅带有接口信息,来自“网络参考”等的 wsdl 和日志。看起来像一个“字符串”,但它是一个“枚举”(这对我来说是一个新事物..) . 仍然可能有人可以从中受益。这是 if 语句中的新代码,这让我非常悲伤:

                if (oneoftheStates.Type == myWebServer.ObjectType.Article)
                {
                    statusID = oneoftheStates.Id;
                    break;
                }

这就是它在生成的 .cs 中的样子:

public enum ObjectType {

/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("")]
Item,

/// <remarks/>
Article,

/// <remarks/>
ArticleTemplate,

/// <remarks/>
Layout,

/// <remarks/>
LayoutTemplate,

/// <remarks/>
Image,

/// <remarks/>
Advert,

/// <remarks/>
AdvertTemplate,

/// <remarks/>
Plan,

/// <remarks/>
Audio,

/// <remarks/>
Video,

/// <remarks/>
Library,

/// <remarks/>
Dossier,

/// <remarks/>
DossierTemplate,

/// <remarks/>
LayoutModule,

/// <remarks/>
LayoutModuleTemplate,

/// <remarks/>
Task,

/// <remarks/>
Hyperlink,

/// <remarks/>
Presentation,

/// <remarks/>
Archive,

/// <remarks/>
Other,

}

希望这可以帮助其他没有想到枚举的人......谁知道。(更改标题等以反映这一点)

于 2012-09-13T15:00:11.723 回答