我不懂。我能够将我的第一个枚举值转换为int而不是第二个?
public enum PayPalTransactionType
{
Authorization = 0, // Debit
Capture = 1, // Credit
Refund = 2,
Void = 3
}
public string GetPayPalTransCode(PayPalServiceBase.PayPalTransactionType payPalTransactionType)
{
string actionCode = string.Empty;
switch (payPalTransactionType)
{
case (int)PayPalServiceBase.PayPalTransactionType.Authorization:
actionCode = "Debit";
break;
case (int)PayPalServiceBase.PayPalTransactionType.Capture:
actionCode = "Credit";
break;
}
return actionCode;
}
在我的第二个案例陈述中我得到了这个投射错误:
无法隐式转换类型
int
到PayPalTransactionType
。一个 存在显式转换(是吗? 错过演员?)
答案 0 :(得分:11)
你为什么要在第一时间施展?只需将它作为枚举值保留在任何地方:
public string GetPayPalTransCode
(PayPalServiceBase.PayPalTransactionType payPalTransactionType)
{
string actionCode = string.Empty;
switch (payPalTransactionType)
{
case PayPalServiceBase.PayPalTransactionType.Authorization:
actionCode = "Debit";
break;
case PayPalServiceBase.PayPalTransactionType.Capture:
actionCode = "Credit";
break;
}
return actionCode;
}
此外,我对未识别的代码有明确的默认操作,只是直接返回:
public string GetPayPalTransCode
(PayPalServiceBase.PayPalTransactionType payPalTransactionType)
{
switch (payPalTransactionType)
{
case PayPalServiceBase.PayPalTransactionType.Authorization:
return "Debit";
case PayPalServiceBase.PayPalTransactionType.Capture:
return "Credit";
default:
return ""; // Or throw an exception if this represents an error
}
}
或者,您可以使用Dictionary<PayPalTransactionType, string>
。
答案 1 :(得分:6)
你为什么要投奔int
?你switch
的东西已经是枚举类型了!
答案 2 :(得分:4)
关于问题的另一部分,第一个强制转换工作的原因是因为从常量int 0到枚举类型的隐式转换始终有效,而另一个尝试强制转换来自非零int值。
答案 3 :(得分:2)
为什么上帝的缘故你在做演员?
public string GetPayPalTransCode(PayPalServiceBase.PayPalTransactionType payPalTransactionType)
{
switch (payPalTransactionType)
{
case (int)PayPalServiceBase.PayPalTransactionType.Authorization:
break;
case (int)PayPalServiceBase.PayPalTransactionType.Capture:
break;
}
}
这里的基本相同类型,不是吗?!你想比较enum和enum,不是吗?
只是做
public string GetPayPalTransCode(PayPalServiceBase.PayPalTransactionType payPalTransactionType)
{
// ...
switch (payPalTransactionType)
{
case PayPalServiceBase.PayPalTransactionType.Authorization:
break;
case PayPalServiceBase.PayPalTransactionType.Capture:
break;
}
// ...
}
btw - 将PayPalTransactionType.Authorization
分配给0
并非最佳做法。 0
应该用于解析后备!
修改强>
如果你这样做,你的代码就是正确的
public string GetPayPalTransCode(PayPalServiceBase.PayPalTransactionType payPalTransactionType)
{
switch ((int)payPalTransactionType)
{
case (int)PayPalServiceBase.PayPalTransactionType.Authorization:
break;
case (int)PayPalServiceBase.PayPalTransactionType.Capture:
break;
}
}
非常......!
答案 4 :(得分:1)
删除案例陈述中的(int)
强制转型。交换机可以处理枚举值。
由于开关是“PayPalTransactionType”,因此应在case语句中使用该类型的值。
答案 5 :(得分:0)
您首先不需要这些演员阵容。只需将其case PayPalServiceBase.PayPalTransactionType.Authorization
等等。
答案 6 :(得分:0)
为什么首先将它转换为int。?只需使用枚举类型执行case语句。
如果你真的只是查找一个字符串,一个更好的方法是一个字符串数组,你可以通过枚举类型进行索引。这将更快,代码更少,更易于维护。
这样的事情:
public enum PayPalTransactionType
{
Authorization = 0, // Debit
Capture = 1, // Credit
Refund = 2,
Void = 3,
Max // This must always be the last type and is used just as a marker.
}
string[] ActionCode = new string[(int)PayPalTransactionType.Max] { "Debit", "Credit", "Refund", "Void" };
public string GetPayPalTransCode(PayPalTransactionType payPalTransactionType)
{
return ActionCode[(int)payPalTransactionType];
}
答案 7 :(得分:0)
您不需要演员int
。只需直接使用枚举。
switch (payPalTransactionType)
{
case PayPalServiceBase.PayPalTransactionType.Authorization:
actionCode = "Debit";
break;
case PayPalServiceBase.PayPalTransactionType.Capture:
actionCode = "Credit";
break;
}
发生错误是因为您尝试隐式将payPalTransactionType
转换为int
。也许这会启发你的问题:
switch ((int)payPalTransactionType)
{
case (int)PayPalServiceBase.PayPalTransactionType.Authorization:
actionCode = "Debit";
break;
case (int)PayPalServiceBase.PayPalTransactionType.Capture:
actionCode = "Credit";
break;
}
第一次演员会让您switch
而不是int
来PayPalTransactionType
。由于switch语句支持枚举,因此不需要此强制转换。
答案 8 :(得分:0)
添
我不是Java / C#专家,但这是我在上面的代码块上的2美分......
如果你正在使用枚举,为什么你需要有一个int值,如果你这样做,那么做一些像:
public enum PayPalTransactionType { 授权(0,借记), 捕获(1,信用), 退款(3,null), 无效(4. null);
private final int code;
public int getCode()
{return(code);}
private PayPalTransactionType(final int code, final TransactionType transactionType)
{
this.code = code;
this.transactionType = transactionType;
}
private TransactionType getTransactionType()
{return(transactionType);}
}
public enum TransactionType { 信用(“资金被添加到指定的帐户。”), 借记(“资金从指定账户中扣除。”);
private final String description;
public String getDescription() {返回(介绍);}
私有TransactionType(最终字符串描述) {this.description = description;} }
开关对于极少数情况很有用。你可以这样做:
final PayPalTransactionType payPalTransactionType = PayPalTransactionType.Authorization; //这只是您要传递的参数的一个示例。
payPalTransactionType.getTransactionType(); // emum是一个静态数据库,只存储与此值相关的其他内容。
沃尔特
答案 9 :(得分:0)
这不是向你提出问题的演员。它将(int)PayPalServiceBase.PayPalTransactionType.Capture
(这是一个int)转换回PayPalServiceBase.PayPalTransactionType,这就是问题所在。