对于银行主表(列名:java.lang.IllegalArgumentException: Segment cannot be null
at org.eclipse.xtext.naming.QualifiedName.create(QualifiedName.java:203)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1008)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:993)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:901)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:864)
at mylang.MyLangInterpreter.doEvaluate(GpflInterpreter.java:414)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:900)
at mylang.MyLangInterpreter.doEvaluate(GpflInterpreter.java:450)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:189)
at mylang.MyLangInterpreter._doEvaluate(GpflInterpreter.java:314)
at mylang.MyLangInterpreter.doEvaluate(GpflInterpreter.java:430)
at mylang.MyLangInterpreter.lambda$3(GpflInterpreter.java:263)
at mylang.MyLangInterpreter$$Lambda$13/974320615.accept(Unknown Source)
at java.lang.Iterable.forEach(Iterable.java:75)
at mylang.MyLangInterpreter.run(GpflInterpreter.java:265)
at fr.mleduc.gpfl.tests.MyLangInterpreterTest.test1(GpflInterpreterTest.java:113)
...
)
BankAccountType
我将枚举值存储在每一行的一个表数据库中。
现在在从数据库获取记录时,我只返回此枚举值。但是我应该如何在接受
的C#中编写泛型方法public enum eBankAccountType
{
Savings = 1,
Current = 2,
CC = 3,
Other = 4,
}
然后BankAccountType == 1
,Savings
然后BankAccountType == 2
等等)并返回一个数据表,其中为每一行添加了一个新列(在本例中为'BankAccountTypeDescription')
请注意,从数据库返回的数据表可以有多个列,这些列是从不同的枚举中填充的。
如果我使用任何静态枚举类型,我可以这样做,但我想创建更多的通用方法。
我正在尝试创建这样的通用方法。
Current
并称之为。
public DataTable GetDescriptionforEnumColumn(DataTable dt, Enum[] objEnum, string[] colName)
{
foreach (string item in colName)
{
string strIDColumnName = item;
string strNewColumnName = item + "Description";
dt.Columns.Add(strNewColumnName);
foreach (DataRow row in dt.Rows)
{
row[strNewColumnName] = Enum.Parse(objEnum[0].GetType(), ConvertTo.String(row[item]), true);
}
}
return dt;
}
但我遇到的问题是在这个泛型方法中传递和检索枚举(或枚举类型)数组。
答案 0 :(得分:0)
我认为你的主要问题是当你只有一个Savings
时如何获得值1
并使其适用于所有类型的枚举。
如果我的假设是正确的,那么Enum.ToObject方法就是你的朋友:
public static string convertEnum(int intValue, Type enumType)
{
return Enum.ToObject(enumType, intValue).ToString();
}
为了使此方法更安全,您可以使用Enum.IsDefined方法检查此枚举类型中是否完全定义了intValue
:
public static string convertEnum(int value, Type enumType)
{
if (!Enum.IsDefined(enumType, value))
{
throw new ArgumentException("Wrong call mate! gimme somthing to work with...");
}
return Enum.ToObject(enumType, value).ToString();
}
我想凭借这些知识,您应该能够自己编写方法的其余部分。好运
答案 1 :(得分:0)
private DataTable GetDescriptionForEnumColumn(DataTable dt, dynamic columnsInfo)
{
foreach (var item in columnsInfo)
{
string strIDColumnName = item.IDColumnName;
string strNewColumnName = item.IDColumnName + "Description";
Enum columnEnumName = item.ColumnType;
dt.Columns.Add(strNewColumnName);
foreach (DataRow row in dt.Rows)
{
if ((ConvertTo.Integer(row[strIDColumnName]) > 0))
row[strNewColumnName] = SystemEnum.GetEnumDescriptionFromString(Enum.Parse(columnEnumName.GetType(), ConvertTo.String(row[strIDColumnName]), true).ToString(), columnEnumName.GetType());
}
}
return dt;
}
并将其称为:
DataTable dt = GetDescriptionForEnumColumn(dtBank, new[] { new { ColumnType = (Enum)new eBankAccountType(), IDColumnName = "BankAccountType" } });