Я использую Enum, украшенную [Flags] для управления автозагрузкой в моем приложении MVC2. Ниже мои примеры кода:HasFlag не распознает назначение роли
[Flags]
public enum SecurityRoles
{
None = 0,
Executive = 1,
BackOffice = 2,
AccountManager = 4,
Consultant = 8,
Administrator = 16
}
[TestMethod]
public void MultipleSelectionsTest()
{
var requiredRoles = SecurityRoles.Executive | SecurityRoles.BackOffice;
var user1Roles = SecurityRoles.Executive | SecurityRoles.Administrator | SecurityRoles.BackOffice | SecurityRoles.Consultant;
var user1HasAccess = user1Roles.HasFlag(requiredRoles);
var user2Roles = SecurityRoles.Administrator | SecurityRoles.BackOffice | SecurityRoles.Consultant;
var user2HasAccess = user2Roles.HasFlag(requiredRoles);
Assert.IsTrue(user1HasAccess); //returns true
Assert.IsTrue(user2HasAccess); //returns false
}
Как вы можете видеть, user2Roles containes BackOffice роль и requiredRoles также содержит BackOffice роль, однако, user2HasAccess ложно. Почему это? Что мне не хватает? user1HasAccess - это правда.
Ваш метод расширение может быть улучшено, это решение, вероятно, быстрее: открытая статическая BOOL HasAnyFlag (этот источник Enum, Enum флаги) {возвращение (источник и флаги) = 0; }. Также непроверенный btw – JBSnorro
@JBSnorro ваш код не работает, содержит ошибку сравнения. – Tomas
@ Томас. Sry, это, очевидно, должно было быть public public bool HasAnyFlag (этот источник Enum, флаги Enum) {return (Convert.ToInt32 (source) & Convert.ToInt32 (flags))! = 0; } ' – JBSnorro