WCFサーバー側で次の列挙型を定義しました。
[DataContract]
public enum CarConditionEnum {
[EnumMember]
New,
[EnumMember]
Used,
[EnumMember]
Rental,
[EnumMember]
Broken,
[EnumMember]
Stolen
}
私が使用する操作コントラクトメソッドインターフェイスメソッド、サーバー側も:
[OperationContract]
string WhatEnumDidIUse(CarConditionEnum carCondition);
このインターフェース(サーバー側)のメソッド実装:
public string WhatEnumDidIUse(CarConditionEnum carCondition) {
return carCondition.ToString();
}
このサービスへのプロキシを動的に生成すると、生成されるメソッドは次のようになります(Web参照を使用して生成した場合も同じように見えると確信しています)。
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/IService1/WhatEnumDidIUse", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string WhatEnumDidIUse(CarConditionEnum carCondition, [System.Xml.Serialization.XmlIgnoreAttribute()] bool carConditionSpecified) {
object[] results = this.Invoke("WhatEnumDidIUse", new object[] {carCondition, carConditionSpecified});
return ((string)(results[0]));
}
列挙可能オブジェクトが指定されたことを指定するこのブール値があるのはなぜですか?
また、なぜこのブール値は奇妙に動作するのですか?たとえば、ブール引数をfalseに設定すると、メソッドは常に最初の列挙可能なNewを返します。boolean引数をtrueに設定すると、実際に指定した列挙可能なものが返されます。