我試圖表示卡提供商爲enum
。基本上,信用卡(基於BIN號碼)可以是Visa或Mastercard,子類型可以是Credit或Debit(簡單示例,但我想處理所有情況(Maestro,Visa Electron,UATP ...)結合信用卡網絡的位掩碼枚舉
它似乎工作,但看到最後的情況下這是可以做到CardProvider Visa | CardProvider MasterCard
這是不正確的,我們知道。
我有辦法防止這種情況?另外,它是當前enum
結構是否正確?
enum CardProvider
{
CardProviderNone = 0,
CardProviderMasterCard = 1 << 0,
CardProviderMasterCardDebit = 1 << 1,
CardProviderMasterCardCredit = 1 << 2,
CardProviderVisa = 2 << 0,
CardProviderVisaDebit = 2 << 1,
CardProviderVisaCredit = 2 << 2
};
CardProvider cardType1 = CardProviderMasterCard;
CardProvider cardType2 = CardProviderMasterCard | CardProviderMasterCardCredit;
CardProvider cardType3 = CardProviderMasterCard | CardProviderMasterCardDebit;
CardProvider cardType4 = CardProviderVisa | CardProviderVisaDebit;
// possible to prevent?
CardProvider cardType5 = CardProvider Visa | CardProvider MasterCard;
// works as expected:
assert(cardType1 & CardProviderMasterCard);
assert(cardType2 & CardProviderMasterCardCredit);
assert(cardType2 & CardProviderMasterCard);
assert(cardType3 & CardProviderMasterCard);
assert(!(cardType4 & CardProviderMasterCard));
assert(cardType4 & CardProviderVisa);
// works but shouldn't be allowed
assert(cardType5 & CardProviderVisa);
「我有辦法防止這種」 - 肯定的:不使用它,或趕在軟件。如果你問語言限制:不。 – Olaf