相关疑难解决方法(0)

将枚举绑定到WinForms组合框,然后进行设置

很多人都回答了如何将枚举绑定到WinForms中的组合框的问题.就像这样:

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));
Run Code Online (Sandbox Code Playgroud)

但是如果不能设置要显示的实际值,那就没用了.

我试过了:

comboBox1.SelectedItem = MyEnum.Something; // Does not work. SelectedItem remains null
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something); // ArgumentOutOfRangeException, SelectedIndex remains -1
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法如何做到这一点?

.net c# enums combobox winforms

112
推荐指数
8
解决办法
17万
查看次数

枚举的扩展方法,而不是枚举的实例

我对我的事情进行了枚举,如下:

public enum Things
{
   OneThing,
   AnotherThing
}
Run Code Online (Sandbox Code Playgroud)

我想为这个枚举编写一个扩展方法(类似于Prize的答案)但是该方法适用于枚举实例,ala

Things thing; var list = thing.ToSelectList();
Run Code Online (Sandbox Code Playgroud)

我希望它能用于实际的枚举:

var list = Things.ToSelectList();
Run Code Online (Sandbox Code Playgroud)

我可以这样做

var list = default(Things).ToSelectList();
Run Code Online (Sandbox Code Playgroud)

但我不喜欢那样:)

我已经接近以下扩展方法:

public static SelectList ToSelectList(this Type type)
{
   if (type.IsEnum)
   {
      var values = from Enum e in Enum.GetValues(type)
                   select new { ID = e, Name = e.ToString() };
      return new SelectList(values, "Id", "Name");
   }
   else
   {
      return null;
   }
}
Run Code Online (Sandbox Code Playgroud)

像这样使用:

var list = typeof(Things).ToSelectList(); …
Run Code Online (Sandbox Code Playgroud)

c# extension-methods enums

44
推荐指数
3
解决办法
3万
查看次数

标签 统计

c# ×2

enums ×2

.net ×1

combobox ×1

extension-methods ×1

winforms ×1