将枚举传递给用作枚举和类型的方法
我正在尝试将Enum传递给一个方法,该方法将为gridview创建列。我可以将枚举作为Enum passEnum或类型enumType传递,并且可以正常工作,但不能一起使用。我的意思是如果我将它作为一个类型传递,Enum.GetNames()方法接受它,如果我将它作为枚举传递,StringEnum.GetString()方法接受它。但我不能通过一个让他们都接受它而我不能单独传递它们(枚举和类型)并且都接受它。 AMOST工作的方法:
public static void AddColumnsToGridView(GridView gv, Enum passEnum, Type enumType)
{
BoundField bf = new BoundField();
int c = 0;
foreach (string item in Enum.GetNames(enumType))
{
bf = new BoundField();
bf.HeaderText = StringEnum.GetString((passEnum)c);
bf.DataField = item;
bf.ItemStyle.CssClass = "siteFont leftPaddingThree";
bf.SortExpression = item;
gv.Columns.Add(bf);
c++;
}
}
我在passEnum下面得到一条红色的波浪线,上面写着:“无法找到类型或命名空间'passEnum'等等。”出于某种原因,我可以在这样的方法之外使用它:
BoundField bf = new BoundField();
int c = 0;
foreach (string item in Enum.GetNames(typeof(PatientRX)))
{
bf = new BoundField();
bf.HeaderText = StringEnum.GetString((PatientRX)c);
bf.DataField = item;
bf.ItemStyle.CssClass = "siteFont leftPaddingThree";
bf.SortExpression = item;
gvRX.Columns.Add(bf);
c++;
}
StringEnum.GetString()方法获取附加到枚举的字符串值。它需要一个枚举传递给它。如何才能在方法中使用它?
没有找到相关结果
已邀请:
2 个回复
诫商
我更喜欢使用仿制药,就像迈克发布的那样......但是这条线仍然存在问题:
它调用的方法需要一个枚举,并且Mike的代码中写的“enumType”不被视为Enum,显然是因为我收到错误“无法从TEnum转换为System.Enum,这里是它调用的方法:
我没有编写上面的方法(或StringEnum类)...但这里是我为获取枚举字符串列表而添加的方法:
如果有人知道迈克的方式(使用泛型)我可以完成这件事,我会很感激。这完全是学习和知识的问题,因为我已经实现了上面的解决方案,但我仍然想知道如何以一种真正通用的方式做到这一点......谢谢!
蓄荣糖些
这不是我从头开始做的事情,但它应该有效。 编辑:对不起,我忘了显示一个调用它的示例,它看起来像这样:
编辑2:我在下面的评论中提到,如果枚举不是从0开始或者错过了值,你就会遇到问题。你可能想尝试这样做:
请注意,这不再是通用方法,因为它不需要(这样更好 - 您不会在运行时为每个枚举类型获得JITted的多个版本)。只需将其称为:
我显然没有StringEnum的代码,所以我没有自己编译,但我认为应该没问题。如果它仍然是个问题,请告诉我。