小编Jam*_*zor的帖子

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

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

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万
查看次数

Visual Studio中代码重构(var rename)的键盘快捷方式

在Visual Studio中重命名变量时(我使用2010),它会显示一个小标记,单击该标记会导致提供重命名所有相关引用的下拉列表.

我想要做的是,备用鼠标并单击它以显示下拉列表.
我想知道是否有办法通过键盘访问它.

ide shortcuts refactoring keyboard-shortcuts visual-studio

12
推荐指数
1
解决办法
5524
查看次数

在泛型List的ForEach()中使用lambda表达式中的条件运算符?

是不是允许在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)

只是不可能?

c# lambda conditional-operator .net-3.5

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