Ich möchte eine IRouteConstraint erstellen, die einen Wert gegen mögliche Werte eines Enums filtert. Ich habe versucht, es selbst zu googeln, aber das hat nichts ergeben.
Irgendwelche Ideen?
Ich möchte eine IRouteConstraint erstellen, die einen Wert gegen mögliche Werte eines Enums filtert. Ich habe versucht, es selbst zu googeln, aber das hat nichts ergeben.
Irgendwelche Ideen?
Das habe ich mir ausgedacht:
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());
}
}
Ich denke, dass ein HashSet viel besser funktioniert als Enum.GetNames bei jedem Match. Auch die Verwendung von Generika macht es ein bisschen mehr fließend, wenn Sie die Einschränkung verwenden.
Leider ist T : Enum für den Compiler nicht zulässig.
参照 este
Im Wesentlichen benötigen Sie
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());
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.