Шаблоны Variadic являются частью стандарта C ++ 0x, который еще официально не выпущен. Они поддерживаются gcc с версии 4.3, но вам нужно включить поддержку C ++ 0x, добавив компилятор -std = c ++ 0x.
Как насчет этого?
public static class Extensions
{
public static bool In<T>(this T testValue, params T[] values)
{
return values.Contains(testValue);
}
}
Использование:
Personnel userId = Personnel.JohnDoe;
if (userId.In(Personnel.JohnDoe, Personnel.JaneDoe))
{
// Do something
}
Я не могу требовать кредита на это, но я также не могу помнить, где я видел его. Так, кредит Вам, анонимному интернет-незнакомцу.
Как насчет чего-то вроде этого:
public static bool IsAllowed(int userID) {
List<int> IDs = new List<string> { 1,2,3,4,5 };
return IDs.Contains(userID);
}
(Вы могли, конечно, изменить статическое состояние, инициализировать идентификационный класс в некотором другом месте, использовать IEnumerable <>, и т.д., на основе Ваших потребностей. Основной момент - то, что самым близким эквивалентом в операторе в SQL является Набор. Содержит () функцию.)
Я инкапсулировал бы список позволенных идентификаторов, поскольку данные не кодируют. Затем это - источник, может быть изменен легко позже.
List<int> allowedIDs = ...;
public bool IsAllowed(int userID)
{
return allowedIDs.Contains(userID);
}
При использовании.NET 3.5, можно использовать IEnumerable
вместо List
благодаря дополнительным методам.
(Эта функция не должна быть статичной. Посмотрите эту регистрацию: использование слишком большого количества помех, плохих или хороших?.)
Идентификатор пользователя полномочий является базирующимся? Если так, можно закончить с лучшим решением путем движения в основанные на роли полномочия. Или можно закончить тем, что имели необходимость отредактировать тот метод вполне часто для добавления дополнительных пользователей к списку "разрешенных пользователей".
Например, перечислимый UserRole {Пользователь, Администратор, LordEmperor}
class User {
public UserRole Role{get; set;}
public string Name {get; set;}
public int UserId {get; set;}
}
public static bool IsAllowed(User user) {
return user.Role == UserRole.LordEmperor;
}
Миленький прием должен отсортировать реверса путем, Вы обычно используете.Contains (), как:-
public static bool IsAllowed(int userID) {
return new int[] { Personnel.JaneDoe, Personnel.JohnDoe }.Contains(userID);
}
Куда можно поместить столько записей в массив, сколько Вам нравится.
Если бы Personnel.x является перечислением, у Вас были бы некоторые проблемы кастинга с этим (и с исходным кодом Вы отправили), и в этом случае будет легче использовать:-
public static bool IsAllowed(int userID) {
return Enum.IsDefined(typeof(Personnel), userID);
}
Можно ли записать итератор для Персонала.
public static bool IsAllowed(int userID)
{
return (Personnel.Contains(userID))
}
public bool Contains(int userID) : extends Personnel (i think that is how it is written)
{
foreach (int id in Personnel)
if (id == userid)
return true;
return false;
}
Здесь является самым близким, о котором я могу думать:
using System.Linq;
public static bool IsAllowed(int userID)
{
return new Personnel[]
{ Personnel.JohnDoe, Personnel.JaneDoe }.Contains((Personnel)userID);
}
Просто другая идея синтаксиса:
return new [] { Personnel.JohnDoe, Personnel.JaneDoe }.Contains(userID);