我在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]));
}
为什么现在有这个布尔值来指定已经指定了枚举?
另外,为什么这个布尔表现得很奇怪?例如,如果我将boolean参数设置为false,则我的方法将始终返回第一个可枚举的New。如果我将boolean参数设置为true,它将返回我实际指定的任何可枚举。
答案 0 :(得分:2)
这是因为布尔值表示是否提供了枚举参数。如果没有,那么它的行为就像你提供了整数值为零的枚举。
话虽如此,我不明白为什么“*指定”存在。根据您的代码,枚举必须始终存在。如果您已指定CarConditionEnum?
,那么我会理解它。
您确定这是WCF服务吗?这看起来像是ASMX的序幕。