C# 为一个枚举存储多个值
我在一个类中将其声明为C# 为一个枚举存储多个值,c#,enums,C#,Enums,我在一个类中将其声明为public ENUM_AccDebitCreditDebitCredit{get;set;} 在我的代码中,我尝试从数据表中填充这个enum,如下所示 public enum ENUM_AccDebitCredit { accDR = 1, accCR = 2 } DebitCredit=(ENUM_TransactionType)ENUM.Parse(typeof(ENUM_TransactionType),rsACC_AccountingRules.
public ENUM_AccDebitCreditDebitCredit{get;set;}
在我的代码中,我尝试从数据表中填充这个enum
,如下所示
public enum ENUM_AccDebitCredit
{
accDR = 1,
accCR = 2
}
DebitCredit=(ENUM_TransactionType)ENUM.Parse(typeof(ENUM_TransactionType),rsACC_AccountingRules.Tables[0]。行[0][“DR”].ToString())和(ENUM_TransactionType)ENUM.Parse(typeof(ENUM_TransactionType),rsACC_AccountingRules.Tables[0]。行[0][“CR”].ToString())代码>
我想将多个值存储在DebitCredit
中,我如何才能做到这一点
我的数据表如下
public enum ENUM_AccDebitCredit
{
accDR = 1,
accCR = 2
}
您可以拥有一组ENUM\u TransactionType
或使用[Flags]
将每个项目表示为位标志。您可以拥有一组ENUM\u TransactionType
或使用[Flags]
将每个项目表示为位标志。如果您的意思是希望枚举“混合”多个值,您需要将代码更改为:
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
此外,您还需要使用按位或|
运算符,而不是和&
:
[Flags]
public enum ENUM_TransactionType
{
None = 0,
ttSales = 1,
ttPurchase = 2,
ttReturnIn = 4
}
如果您的意思是希望枚举“混合”多个值,则需要将代码更改为:
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
此外,您还需要使用按位或|
运算符,而不是和&
:
[Flags]
public enum ENUM_TransactionType
{
None = 0,
ttSales = 1,
ttPurchase = 2,
ttReturnIn = 4
}
关于您最近的编辑,以下是您将如何进行编辑:
ENUM_TransactionType value = ENUM_TransactionType.ttSales | ENUM_TransactionType.ttPurchase;
您可以使用[Flags]
属性,也可以尝试以下操作:
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;
从DataTable
中,您可以尝试以下操作:
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;
这是一个称为位屏蔽的过程。有关此过程背后的数学运算的更多信息,请参见此处:。关于您最近的编辑,以下是您将如何执行此操作:
ENUM_TransactionType value = ENUM_TransactionType.ttSales | ENUM_TransactionType.ttPurchase;
您可以使用[Flags]
属性,也可以尝试以下操作:
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;
从DataTable
中,您可以尝试以下操作:
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;
这是一个称为位屏蔽的过程。有关此过程背后的数学运算的更多信息,请参见此处:。如果希望枚举的行为类似于标志,则可以使用[Flags]
属性标记枚举的可能重复项。但是,您需要像1、2、4这样的值(除非Return实际上是Sales和Purchase,这似乎不太可能),并使用|
将它们组合起来。如果您希望DebitCredit成为一个数组,请查看我需要从数据表值中填充可能的重复项,如果您希望它的行为类似于标志,请使用[Flags]
属性标记您的枚举。但是,如果希望DebitCredit成为一个数组,则需要像1、2、4这样的值(除非Return实际上同时是Sales和Purchase,这似乎不太可能),并使用
组合它们,签出我需要从Datatable值中填写Show我可以从Datatable中分配myclass.DebitCard
吗谢谢,但不是ttSales and ttPurchase
存储在myclass中的值。DebitCard
是ttReturnIn
谢谢你的回答,但不是显示的值3
@Dotnet这是正确的。要测试一个值,您可以这样做:if(myClass.DebitCard&ENUM_AccDebitCredit.accDR>0){/*…*/}
我如何从数据表中分配myclass.DebitCard
谢谢,但不是ttSales和ttPurchase
存储在myclass.DebitCard
中的值。DebitCard
是ttReturnIn
谢谢您的回答,但它显示的值不是3
@Dotnet,这是正确的。要测试一个值,您可以这样做:if(myClass.DebitCard&ENUM_AccDebitCredit.accDR>0){/*…*/}
我需要从datatable分配值,是吗possible@Dotnet当然如果数据列是带有FLAGS属性的枚举类型,并且您做了整个<代码> <代码/> OR,则没有问题。@ Mat IasFaseReMaster,我会考虑将属性设为可空值而不是<代码> No.< /代码> .Dayiel.AuthWaly,然后您可能会有不必要的空引用异常,当检查.None
或0
就足够了。@DanielA.White Null或“None”有不同的含义。Null表示“未赋值”,“无”表示“无值”。在位操作中,您的建议增加了复杂性,因为如果它为空,我无法执行“SomeEnum.HasFlag(…)”。在这种情况下,没有比这更具语义的了。在其他情况下,我会使用一个null,我需要从datatable中赋值,是吗possible@Dotnet当然如果数据列是带有FLAGS属性的枚举类型,并且您做了整个<代码> <代码/> OR,则没有问题。@ Mat IasFaseReMaster,我会考虑将属性设为可空值而不是<代码> No.< /代码> .Dayiel.AuthWaly,然后您可能会有不必要的空引用异常,当检查.None
或0
就足够了。@DanielA.White Null或“None”有不同的含义。Null表示“未赋值”,“无”表示“无值”。在位操作中,您的建议增加了复杂性,因为如果它为空,我无法执行“SomeEnum.HasFlag(…)”。在这种情况下,没有比这更具语义的了。在其他情况下,我会使用null。