-2

背景情報: VS10 を使用して C# .NET 2.0 内で作業する。

応答としていくつかのものを返す Web サービスを呼び出しています。そのうちの 1 つはStates ですStatesStateの配列です。各 State にはいくつかのプロパティがあり、一部は null 可能です。3 番目のプロパティであるTypeを分離することに関心があります。Type はObjectType型で、いくつかのものを指定できますが、そのうちの 1 つが「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!

            }
        }

今質問:

「Article」の代わりに「」引用符が機能せず、Article 自体が機能しないなどを使用する必要があります。IF がここで行われる方法では、「Operator == can'tタイプ 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;
            }
        }

forの代わりにforeachを使用する方が良いかもしれません。これは、読みやすく、読みやすいからです。

于 2012-09-13T13:30:45.053 に答える
0

わかりました。コマンド プロンプトで wsdlを手動で実行すると、生成された .cs コードが表示されました。そこで、インターフェース情報、「Web参照」などの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 に答える