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
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 に答える
0

列挙に値以上のものを「混在」させたい場合は、コードを次のように変更する必要があります。

[Flags]
public enum ENUM_TransactionType
{
   None = 0,
   ttSales = 1,
   ttPurchase = 2,
   ttReturnIn = 4
}

また、 AND の代わりにビットごとの OR|演算子を使用する必要があり&ます。

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;

aから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 に答える