Я думаю, вам нужно использовать UInt32
как тип вашего перечисления GroupType
следующим образом:
[Flags]
public enum GroupType : uint
{
BUILTIN_LOCAL_GROUP = 0x00000001,
ACCOUNT_GROUP = 0x00000002,
RESOURCE_GROUP = 0x00000004,
UNIVERSAL_GROUP = 0x00000008,
APP_BASIC_GROUP = 0x00000010,
APP_QUERY_GROUP = 0x00000020,
SECURITY_ENABLED = 0x80000000
}
Дайте мне знать, если это решит вашу проблему.
EDIT: Хорошо, я не был уверен, был ли Entry
созданным вами объектом или частью API Active Directory. Сказав это, я быстро создал следующие переменные в проекте, над которым сейчас работаю, и скомпилировал следующим образом:
// I only made it static so I could get my compiler to compile this in something I'm currently
// working on. It's not necessary for it to be static.
static int SECURITY_ENABLED = 0x80000000;
int newValue = SECURITY_ENABLED | 1;
Я не получил никаких ошибок времени компиляции. На самом деле, повторно взглянув на значение 0x80000000
, оно находится в диапазоне Int32
.
Повторно глядя на ваш код выше, в какой именно строке вы получаете сообщение об ошибке? Я вижу этот подозрительный код:
if (groupTypes.Count == 1)
{
var firstFlag = (int) groupTypes[0];
// What is this checking, exactly?
// Is this where the error is occurring?
var longFlag = -(((long) flag) - firstFlag);
if ((longFlag == 0x80000000)) // Extra parentheses here...just a formatting thing
groupTypes.Add(GroupType.SECURITY_ENABLED);
}
Возможно, этот код можно упростить?
public List<GroupType> GetGroupType()
{
var groupTypes = new List<GroupType>();
var flag = (GroupType) this.Entry.Properties["groupType"].Value;
if (flag & GroupType.ACCOUNT_GROUP > 0)
groupTypes.Add(GroupType.ACCOUNT_GROUP;
else if (flag & GroupType.APP_BASIC_GROUP > 0)
groupTypes.Add(GroupType.APP_BASIC_GROUP);
// ... Other else if ad nauseum ...
else if (flag & GroupType.SERUCITY_ENABLED > 0)
groupTypes.Add(GroupType.SECURITY_ENABLED);
return groupTypes;
}
Если вам действительно нужен ArrayList()
по какой-либо причине, вы можете просто сделать return groupTypes.ToArray<int>();
ХТН.
person
fourpastmidnight
schedule
15.05.2013