2

我正在使用来自三个相应枚举的值填充三个列表框。有什么方法可以避免使用三种不同但非常相似的方法?这是我现在拥有的:

    private void PopulateListBoxOne()
    {
        foreach (EnumOne one in Enum.GetValues(typeof(EnumOne)))
        {
            lstOne.Items.Add(one);
        }
        lstOne.SelectedIndex         = 0;
    }

    private void PopulateListBoxTwo()
    {
        foreach (EnumTwo two in Enum.GetValues(typeof(EnumTwo)))
        {
            lstTwo.Items.Add(two);
        }
        lstTwo.SelectedIndex         = 0;
    }

    private void PopulateListBoxThree()
    {
        foreach (EnumThree three in Enum.GetValues(typeof(EnumThree)))
        {
            lstThree.Items.Add(three);
        }
        lstThree.SelectedIndex         = 0;
    }

但我宁愿有一种方法(我可以调用三次)看起来像:

private void PopulateListBox(ListBox ListBoxName, Enum EnumName)
{
    // ... code here!
}

我是一个相当缺乏经验的程序员,所以虽然我搜索过,但我不太确定我在搜索什么。抱歉,如果之前已回答过此问题;我同样很感激能看到一个现有的答案。谢谢!

4

3 回答 3

5

您需要将枚举类型传递给您的方法

private void PopulateListBox(ListBox ListBoxName, Type EnumType)
{
    foreach (var value in Enum.GetValues(EnumType))
    {
        ListBoxName.Items.Add(value);
    }
    ListBoxName.SelectedIndex=0;
}

所以这样称呼它:

PopulateListBox(lstThree,typeof(EnumThree));
于 2013-10-10T11:01:42.060 回答
3

您可以使用通用方法:

private void PopulateListBox<TEnum>(ListBox listBox, bool clearBeforeFill, int selIndex) where TEnum : struct, IConvertible
{
    if (!typeof(TEnum).IsEnum)
        throw new ArgumentException("T must be an enum type");

    if(clearBeforeFill) listBox.Items.Clear();
    listBox.Items.AddRange(Enum.GetNames(typeof(TEnum))); // or listBox.Items.AddRange(Enum.GetValues(typeof(TEnum)).Cast<object>().ToArray());

    if(selIndex >= listBox.Items.Count)
        throw new ArgumentException("SelectedIndex must be lower than ListBox.Items.Count");

    listBox.SelectedIndex = selIndex;
}

你如何使用它:

PopulateListBox<EnumThree>(lstThree, true, 0);
于 2013-10-10T11:05:49.107 回答
0

你可以尝试类似的东西

    private List<T> PopulateList<T>()
    {
        List<T> list = new List<T>();
        foreach (T e in Enum.GetValues(typeof(T)))
        {
            list.Add(e);
        }
        return list;
    }
于 2013-10-10T11:04:13.003 回答