使用枚举值初始化BindingList

时间:2014-01-08 15:45:38

标签: c# enums

我正在尝试使用枚举值初始化BindingList。 根据{{​​3}},有一个构造函数接受IList作为参数 我目前的代码有效,但看起来相当“笨重”:

list = new BindingList<Option>();
foreach (Option o in Enum.GetValues(typeof(Option)))
{
   list.Add(o);
}

我尝试使用此代码:

list = new BindingList<Option>(Enum.GetValues(typeof(Option)));

但它给了我一个错误,说它有无效的参数,即使Enum.GetValues的返回类型是Array,它实现了IList。
如果那个构造函数基本上做了同样的事情,我仍然宁愿使用构造函数来实现可读性。

如果有人能指出我使用这个构造函数以供将来使用的正确方法,我会很高兴。

1 个答案:

答案 0 :(得分:0)

这应该适合你:

var list = new BindingList<Option>(Enum.GetValues(typeof(Option)) as IList<Option>);

根据您的评论进行修改:

虽然我不知道为什么你想要在枚举值列表中添加或删除它,你可以这样做:

var list = new List<Option>(Enum.GetValues(typeof(Option)) as IEnumerable<Option>);
/* Add anything you want to 'list' here */
var blist = new BindingList<Option>(list as IList<Option>);
/* blist is not readonly any more, so add or remove whatever you want */

它是readonly的原因是因为BindingList正在从枚举中克隆值。考虑到您无法在枚举中添加或删除值,因此Enum.GetValues()中的Array以及随后传入BindingList的构造函数的IList是只读的,这是完全合理的。因为BindingList接受IList作为起始值,而不仅仅是IEnumberable源,所以IList的所有属性也被克隆到BindingList中,而不仅仅是值本身。

希望澄清列表为何只读的原因。虽然,您可能想重新考虑为什么需要添加到枚举值列表中。