Okej, till att börja med - är det hela AccessFunction som visas? I så fall är det lite onödigt att göra en hel klass vars enda syfte är att wrappa in en enum. Om din UserCredentials-klass i stället hade en List<AccessFunctionName> så skulle det bli lite enklare.
Om du vill hitta likadana värden i en List, baserat på hur objektet är konfigurerat och inte på vilken instans det är, så måste du overrida Equals och GetHashCode.
public class AccessFunction
{
public AccessFunctionName AccessfunctionName = AccessFunctionName.User_Reader;
public enum AccessFunctionName
{
Admin_Statistics = 10,
Admin_SourceImages = 30,
Admin_Transactions = 40,
User_Reader = 50,
User_Writer = 60,
Admin_User = 70,
Admin_AccessGroups = 80,
Admin_ErrorReciever = 90,
Admin_Confirmation = 100
}
public override bool Equals(object obj)
{
AccessFunction other = obj as AccessFunction;
if (other==null)
return false;
return other.AccessfunctionName.Equals(this.AccessfunctionName);
}
public override int GetHashCode()
{
return AccessfunctionName.GetHashCode();
}
}
Slutligen, om antalet AccessFunctionName kommer att bestå (vilket det bör, eftersom det är definierat som en enum), så kan du slå ihop alla till ett enda värde som du kontrollerar med bit-jämförelse.
//Värdetilldelningen kan göras automatiskt med [Flags]-attributet, men för tydlighets skull så gör vi tilldeningen "manuellt"
public enum AccessFunctionName
{
Admin_Statistics = 1,
Admin_SourceImages = 2,
Admin_Transactions = 4,
User_Reader = 8,
User_Writer = 16,
Admin_User = 32,
Admin_AccessGroups = 64,
Admin_ErrorReciever = 128,
Admin_Confirmation = 256
}
och
public bool CanAccessFunction(AccessFunctionName function)
{
return (AccessfunctionName & function) == function;
}
...vilket är ett vanligt och högpresterande sätt att lagra enums. Inte nödvändigtvis rätt i ditt fall, men det finns där om du är sugen.