public enum ENUM_AccDebitCredit
{
accDR = 1,
accCR = 2
}
我在课堂上将其声明为public ENUM_AccDebitCreditDebitCredit { get; set; }
在我的代码中,我尝试从数据表填充此enum
,如下所示
DebitCredit = (ENUM_TransactionType)Enum.Parse(typeof(ENUM_TransactionType), rsACC_AccountingRules.Tables[0].Rows[0]["DR"].ToString()) & (ENUM_TransactionType)Enum.Parse(typeof(ENUM_TransactionType), rsACC_AccountingRules.Tables[0].Rows[0]["CR"].ToString());
我想在DebitCredit
中存储多个值,我该怎么做
我的数据表如下
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("DR", typeof(string));
table.Columns.Add("CR", typeof(string));
table.Rows.Add(25, "1","2"); // enum values
答案 0 :(得分:1)
您可以拥有ENUM_TransactionType
的集合或使用[Flags]
将每个项目表示为位标志。
答案 1 :(得分:0)
如果您的意思是希望枚举“混合”多于一个值,则需要将代码更改为:
[Flags]
public enum ENUM_TransactionType
{
None = 0,
ttSales = 1,
ttPurchase = 2,
ttReturnIn = 4
}
此外,您需要使用按位OR |
运算符而不是AND &
:
ENUM_TransactionType value = ENUM_TransactionType.ttSales | ENUM_TransactionType.ttPurchase;
答案 2 :(得分:0)
关于您最近的编辑,以下是您的操作方法:
public enum ENUM_AccDebitCredit
{
accDR = 1,
accCR = 2
}
var type1 = (ENUM_AccDebitCredit)int.Parse(rsACC_AccountingRules.Tables[0].Rows[0]["DR"].ToString());
var type2 = (ENUM_AccDebitCredit)int.Parse(rsACC_AccountingRules.Tables[0].Rows[0]["CR"].ToString());
myClass.DebitCard = type1 | type2;
您可以使用[Flags]
属性,也可以尝试使用以下内容:
public enum ENUM_TransactionType
{
ttSales = 1,
ttPurchase = 2,
ttReturnIn = 4,
}
myClass.DebitCard = ENUM_TransactionType.ttSales | ENUM_TransactionType.ttReturnIn;
bool hasSales = myClass.DebitCard & ENUM_TransactionType.ttSales > 0;
从DataTable
你可以试试这个:
var type1 = (ENUM_TransactionType)Enum.Parse(typeof(ENUM_TransactionType), rsACC_AccountingRules.Tables[0].Rows[0]["Drug"].ToString());
var type2 = (ENUM_TransactionType)Enum.Parse(typeof(ENUM_TransactionType), rsACC_AccountingRules.Tables[0].Rows[0]["Drug1"].ToString());
myClass.DebitCard = type1 | type2;
这是一个名为位屏蔽的过程。有关此过程背后的数学的更多信息,请参见此处:Bit Masking。
答案 3 :(得分:0)
var DebitCredit = new List<ENUM_TransactionType>();
DebitCredit.Add((ENUM_TransactionType)Enum.Parse(typeof(ENUM_TransactionType), rsACC_AccountingRules.Tables[0].Rows[0]["Drug"].ToString()));
DebitCredit.Add((ENUM_TransactionType)Enum.Parse(typeof(ENUM_TransactionType), rsACC_AccountingRules.Tables[0].Rows[0]["Drug1"].ToString()));
然后你可以测试:
if (DebitCredit.Contains(ENUM_TransactionType.ttSales)) etc.