1
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
4

4 回答 4

1

您可以有一个集合ENUM_TransactionType或用于[Flags]将每个项目表示为一个位标志。

于 2013-03-14T13:23:33.193 回答
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;
于 2013-03-14T13:26:11.187 回答
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;

这是一个称为位屏蔽的过程。有关此过程背后的数学运算的更多信息,请参见此处:位掩码

于 2013-03-14T13:26:56.503 回答
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.
于 2013-03-14T13:38:50.977 回答