5
A
回答
4
见this
从本质上讲,你需要
private Type enumType;
public EnumConstraint(Type enumType)
{
this.enumType = enumType;
}
public bool Match(HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection)
{
// You can also try Enum.IsDefined, but docs say nothing as to
// is it case sensitive or not.
return Enum.GetNames(enumType).Any(s => s.ToLowerInvariant() == values[parameterName].ToString());
}
9
这是我想出了:
public class EnumRouteConstraint<T> : IRouteConstraint
where T : struct
{
private readonly HashSet<string> enumNames;
public EnumRouteConstraint()
{
string[] names = Enum.GetNames(typeof(T));
enumNames = new HashSet<string>(from name in names select name.ToLowerInvariant());
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return enumNames.Contains(values[parameterName].ToString().ToLowerInvariant());
}
}
我认为一个HashSet将执行不是在每个Enum.GetNames好得多比赛。此外,使用泛型让您在使用约束时看起来更流畅。
不幸的是,编译器不允许使用T:Enum。
相关问题
- 1. Java通用绑定(约束)枚举
- 2. 用于F#枚举类型约束的用例?
- 3. ServiceStack Ormlite多列约束失败,其中约束包括枚举
- 4. 枚举具有蕴含约束条件的整数的m元组
- 5. 约束条件不适用于Ipad xamarin.forms
- 6. 约枚举问题
- 7. 用约束/条件回归
- 8. SQLServer2000约束条件
- 9. 使用MySql从varchar到枚举字段的外键约束
- 10. CActiveDataProvider与条件值枚举
- 11. C++枚举和OR条件
- 12. POSTGRESQL的约束条件
- 13. Mysql的约束与条件
- 14. 检查约束的条件
- 15. 条件MYSQL的唯一约束条件
- 16. 约束条件适用于iOS 8,但不适用于iOS 7
- 17. 使用枚举检查条件
- 18. 使用MYSQL条件的唯一约束
- 19. C#的通用约束条件
- 20. SQL Server 2012约束条件
- 21. OCL 2.0约束条件
- 22. 更改约束条件
- 23. 覆盖约束条件
- 24. 主键和约束条件
- 25. MySQL UNIQUE约束条件
- 26. GLPK MathProg - 条件约束
- 27. UILabel sizeToFit和约束条件
- 28. Sybase - 默认约束条件
- 29. ER图和约束条件
- 30. Oracle找到约束条件
在我的博客上 - http://mikemilleresq.wordpress.com/2010/03/12/starting-small-mvc-constraints/ – 2011-06-07 09:43:06
请参阅我的最终结果 – Jaap 2011-06-07 10:32:39
'Enum.IsDefined()'区分大小写,所以应该避免,如果你的路由约束应该工作,无论大小写。 – Chris 2014-04-04 11:23:23