我正在尝试使用Html.DropDownList扩展方法,但无法弄清楚如何将它与枚举一起使用.
假设我有一个这样的枚举:
public enum ItemTypes
{
Movie = 1,
Game = 2,
Book = 3
}
Run Code Online (Sandbox Code Playgroud)
如何使用Html.DropDownList扩展方法创建包含这些值的下拉列表?
或者我最好的办法是简单地创建一个for循环并手动创建Html元素?
我有这个枚举代码:
enum Duration { Day, Week, Month };
Run Code Online (Sandbox Code Playgroud)
我可以为此枚举添加扩展方法吗?
在vs2008中,是否可以编写适用于任何枚举的扩展方法.
我知道你可以针对特定的枚举编写扩展方法,但我希望能够使用单个扩展方法进行每个枚举.这可能吗?
我会使用组合框控件绑定枚举的值.
我写了这段代码:
cboPriorLogicalOperator.DataSource = Enum.GetValues(typeof(MyEnum))
.Cast<MyEnum>()
.Select(p => new { Key = (int)p, Value = p.ToString() })
.ToList();
myComboBox.DisplayMember = "Value";
myComboBox.ValueMember = "Key";
Run Code Online (Sandbox Code Playgroud)
它运作良好,但我想知道是否有一个更简单的方法.
我想知道为什么我们不能在枚举中添加静态方法(只有方法,而不是属性)?那有什么解释吗?
如果允许它将非常有用.
我也想了解谁禁止我们这样做?是IL还是C#?
编辑:
我不想使用扩展方法.因为我不需要传递该枚举的实例.我不需要它的价值......
我想打电话给不喜欢的FooTypes.GetGoodFoos()东西FooTypes.BadFoo.GetSomething()
编辑2:
只有我认为这可能更有用而不是在另一个类中编写这个方法吗?
public enum Colors
{
Red,
LightRed,
Pink,
/* .
.
. */
Green
public static Colors[] GetRedLikes()
{
return new Colors[]
{
Colors.Red,
Colors.LightRed,
Colors.Pink
}
}
}
Run Code Online (Sandbox Code Playgroud) 在这个StackOverflow问题上,我发现了一个非常好的帮助程序方法,用于将字符串解析为通用Enum值:
public static T ParseEnum<T>(string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
Run Code Online (Sandbox Code Playgroud)
我想将其从辅助方法更改为扩展方法,但我对使用泛型并不十分熟悉,因此不确定是否/如何使用泛型。
我尝试过此方法,但是您很快就会看到此代码实际上并未编译:
public static T ParseEnum(this T myEnum, string value)
{
return (T) Enum.Parse(typeof(myEnum), value, true);
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样做,但这也不起作用:
public static Enum ParseEnum(this Enum myEnum, string value)
{
return Enum.Parse(typeof(myEnum), value, true);
}
Run Code Online (Sandbox Code Playgroud)
甚至可以做我在这里问的事情吗?
c# ×5
enums ×4
.net ×3
asp.net ×1
asp.net-mvc ×1
enumeration ×1
generics ×1
static ×1
winforms ×1