我对我的事情进行了枚举,如下:
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) 在Visual Studio中重命名变量时(我使用2010),它会显示一个小标记,单击该标记会导致提供重命名所有相关引用的下拉列表.

我想要做的是,备用鼠标并单击它以显示下拉列表.
我想知道是否有办法通过键盘访问它.
是不是允许在ForEach中的lambda表达式中有一个条件运算符?
List<string> items = new List<string>{"Item 1", "Item 2", "Item I Care About"};
string whatICareAbout = "";
// doesn't compile :(
items.ForEach(item => item.Contains("I Care About") ?
whatICareAbout += item + "," : whatICareAbout += "");
Run Code Online (Sandbox Code Playgroud)
编译错误 - >"只能将赋值,调用,递增,递减和新对象表达式用作语句"
尝试使用普通if也不起作用:
// :(
items.ForEach(item => if (item.Contains("I Care About")) {whatICareAbout += item + ", ";}
Run Code Online (Sandbox Code Playgroud)
只是不可能?