Frage

In C# gibt es eine kürzere Möglichkeit, dies zu schreiben:

public static bool IsAllowed(int userID)
{
    return (userID == Personnel.JohnDoe || userID == Personnel.JaneDoe ...);
}

Wie:

public static bool IsAllowed(int userID)
{
    return (userID in Personnel.JohnDoe, Personnel.JaneDoe ...);
}

Ich weiß, ich könnte auch zu wechseln, aber es gibt wahrscheinlich 50 oder so sind Funktionen wie diese, die ich habe zu schreiben (Portierung eine klassische ASP-Website über ASP.NET), so möchte ich halten Sie so kurz wie möglich.

War es hilfreich?

Lösung

Wie über diese?

public static class Extensions
{
    public static bool In<T>(this T testValue, params T[] values)
    {
        return values.Contains(testValue);
    }
}

Verwendung:

Personnel userId = Personnel.JohnDoe;

if (userId.In(Personnel.JohnDoe, Personnel.JaneDoe))
{
    // Do something
}

Ich kann nicht behaupten, Kredit für diese, aber auch ich kann mich nicht erinnern, wo ich es sah.So ehrt Sie, anonymen Internet-fremder.

Andere Tipps

Wie wäre es mit etwas wie diesem:

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

(Man könnte natürlich ändern Sie die statische status, initialisieren Sie die IDs-Klasse an einem anderen Ort, verwenden eine IEnumerable<>, etc, basierend auf Ihre Bedürfnisse.Der wichtigste Punkt ist, dass die am ehesten entspricht den in - operator in SQL ist die Sammlung.Contains () - Funktion.)

Ich würde die Kapseln die Liste der erlaubten IDs Daten nicht code.Dann wird es die Quelle geändert werden kann später einfach auf.

List<int> allowedIDs = ...;

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

Wenn mit .NET 3.5 verwenden, können Sie IEnumerable statt List Dank der Erweiterung Methoden.

(Diese Funktion sollte nicht statisch sein.Siehe dieses posting: mit zu viel statischer schlecht oder gut ?.)

Sind Berechtigungen Benutzer-id basiert?Wenn dem so ist, können Sie am Ende mit eine bessere Lösung, gehen Sie zu rollenbasierten Berechtigungen.Oder können Sie am Ende mit zu Bearbeiten, dass die Methode ziemlich Häufig zusätzliche Benutzer hinzufügen, um die "Benutzer" - Liste.

Für Beispiel, enum UserRole { User, Administrator, 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;
}

Ein netter kleiner trick ist, die Art umgekehrte Weg, die Sie üblicherweise verwenden .Enthält(), wie:-

public static bool IsAllowed(int userID) {
  return new int[] { Personnel.JaneDoe, Personnel.JohnDoe }.Contains(userID);
}

Wo können Sie so viele Einträge in dem array, die Sie mögen.

Wenn das Personal.x ist ein enum Sie würde haben einige casting-Probleme mit diesem (und mit dem original-code, den Sie gepostet), und in diesem Fall wäre es einfacher zu verwenden ist:-

public static bool IsAllowed(int userID) {
  return Enum.IsDefined(typeof(Personnel), userID);
}

Hier ist der nächste, den ich denken kann:

using System.Linq;
public static bool IsAllowed(int userID)
{
  return new Personnel[]
      { Personnel.JohnDoe, Personnel.JaneDoe }.Contains((Personnel)userID);
}

Können Sie schreiben einen iterator für das Personal.

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;
}

Nur eine andere syntax Idee:

return new [] { Personnel.JohnDoe, Personnel.JaneDoe }.Contains(userID);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top