Краткое условное выражение в C#, подобном SQL 'в' ключевом слове

Шаблоны Variadic являются частью стандарта C ++ 0x, который еще официально не выпущен. Они поддерживаются gcc с версии 4.3, но вам нужно включить поддержку C ++ 0x, добавив компилятор -std = c ++ 0x.

11
задан Marshall 28 August 2008 в 18:01
поделиться

8 ответов

Как насчет этого?

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
}

Я не могу требовать кредита на это, но я также не могу помнить, где я видел его. Так, кредит Вам, анонимному интернет-незнакомцу.

13
ответ дан 3 December 2019 в 06:00
поделиться

Как насчет чего-то вроде этого:

public static bool IsAllowed(int userID) {
  List<int> IDs = new List<string> { 1,2,3,4,5 };
  return IDs.Contains(userID);
}

(Вы могли, конечно, изменить статическое состояние, инициализировать идентификационный класс в некотором другом месте, использовать IEnumerable <>, и т.д., на основе Ваших потребностей. Основной момент - то, что самым близким эквивалентом в операторе в SQL является Набор. Содержит () функцию.)

4
ответ дан 3 December 2019 в 06:00
поделиться

Я инкапсулировал бы список позволенных идентификаторов, поскольку данные не кодируют. Затем это - источник, может быть изменен легко позже.

List<int> allowedIDs = ...;

public bool IsAllowed(int userID)
{
    return allowedIDs.Contains(userID);
}

При использовании.NET 3.5, можно использовать IEnumerable вместо List благодаря дополнительным методам.

(Эта функция не должна быть статичной. Посмотрите эту регистрацию: использование слишком большого количества помех, плохих или хороших?.)

2
ответ дан 3 December 2019 в 06:00
поделиться

Идентификатор пользователя полномочий является базирующимся? Если так, можно закончить с лучшим решением путем движения в основанные на роли полномочия. Или можно закончить тем, что имели необходимость отредактировать тот метод вполне часто для добавления дополнительных пользователей к списку "разрешенных пользователей".

Например, перечислимый 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;
}
1
ответ дан 3 December 2019 в 06:00
поделиться

Миленький прием должен отсортировать реверса путем, Вы обычно используете.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);
}
0
ответ дан 3 December 2019 в 06:00
поделиться

Можно ли записать итератор для Персонала.

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;
}
0
ответ дан 3 December 2019 в 06:00
поделиться

Здесь является самым близким, о котором я могу думать:

using System.Linq;
public static bool IsAllowed(int userID)
{
  return new Personnel[]
      { Personnel.JohnDoe, Personnel.JaneDoe }.Contains((Personnel)userID);
}
0
ответ дан 3 December 2019 в 06:00
поделиться

Просто другая идея синтаксиса:

return new [] { Personnel.JohnDoe, Personnel.JaneDoe }.Contains(userID);
0
ответ дан 3 December 2019 в 06:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: