Comments 17
enum Magic
{
None = 0,
Fire = 1 << 0,
Air = 1 << 1,
Water = 1 << 2,
Earth = 1 << 3,
}
Чистое «Вуду» для некоторых «программистов» и никаких запоминаний степеней двойки.
Скажие каких «множеств» вам не хватает, термин уж больно общий без пояснений.
{
None = 0,
Fire = 1 << 0,
Air = 1 << 1,
Water = 1 << 2,
Earth = 1 << 3,
}
Чистое «Вуду» для некоторых «программистов» и никаких запоминаний степеней двойки.
Скажие каких «множеств» вам не хватает, термин уж больно общий без пояснений.
+8
Я думаю, дельфийского наследия в стиле set of
+2
Могу ещё предложить такое «Вуду»:
enum Magic
{
None = 0,
Fire = 1,
Air = Fire << 1,
Water = Air << 1,
Earth = Water << 1,
}
но ваш метод очевиднее :)
enum Magic
{
None = 0,
Fire = 1,
Air = Fire << 1,
Water = Air << 1,
Earth = Water << 1,
}
но ваш метод очевиднее :)
0
UFO just landed and posted this here
Про "<<" Тоже известное «вуду». Просто про него чаще знают те, кто работал с C/C++ =)
А «множества», про которые я говорил, нужны, например, для такого (загрузить из базы список пользователей, определенного вида. например только программистов и менеджеров):
LoadEmployees (ref dsEmployees, EmployeeKind.Coder | EmployeeKind.Manager);
А «множества», про которые я говорил, нужны, например, для такого (загрузить из базы список пользователей, определенного вида. например только программистов и менеджеров):
LoadEmployees (ref dsEmployees, EmployeeKind.Coder | EmployeeKind.Manager);
0
не вижу припятствий использовать Enum.
В MS SQL, MySQL, Oracle(за остальных не ручаюсь) есть операция «bitwise and». Пишите «where (e.Kind & employeeKind) <> 0» и получаете всех кодеров и менеджеров
В MS SQL, MySQL, Oracle(за остальных не ручаюсь) есть операция «bitwise and». Пишите «where (e.Kind & employeeKind) <> 0» и получаете всех кодеров и менеджеров
0
если не подходит Enum, есть BitVector, на худой конец анонимный массив и LINQ:
var array = new[] { «Hello», «to», «You» };
array.Contains(«Hello»); // true
array.Intersect(new[] { «Hello», «You» }); // Hello, You
var array = new[] { «Hello», «to», «You» };
array.Contains(«Hello»); // true
array.Intersect(new[] { «Hello», «You» }); // Hello, You
0
Немного придерусь
1. Множества (как класс в библиотеке) в С# всё-таки есть, и на любой вкус.
2. Пишите [Flags] вместо [FlagsAttribute]
1. Множества (как класс в библиотеке) в С# всё-таки есть, и на любой вкус.
2. Пишите [Flags] вместо [FlagsAttribute]
0
>1. Множества (как класс в библиотеке) в С# всё-таки есть, и на любой вкус.
Про то, для чего нужно «множество», о котором я написал в этом посте, я написал и комментом выше и в самом посте:
«если где-то нужно передать в качестве аргумента функции несколько флагов»
+
LoadEmployees (ref dsEmployees, EmployeeKind.Coder | EmployeeKind.Manager);
Создавать специально обьект для множества всего лишь для одиночного вызова функции как-то не хочется.
>2. Пишите [Flags] вместо [FlagsAttribute]
спасиб, поправлю =)
Про то, для чего нужно «множество», о котором я написал в этом посте, я написал и комментом выше и в самом посте:
«если где-то нужно передать в качестве аргумента функции несколько флагов»
+
LoadEmployees (ref dsEmployees, EmployeeKind.Coder | EmployeeKind.Manager);
Создавать специально обьект для множества всего лишь для одиночного вызова функции как-то не хочется.
>2. Пишите [Flags] вместо [FlagsAttribute]
спасиб, поправлю =)
0
Это как-то уже совсем не интересно. Скоро появятся статьи: пишем Hello world на C#.
0
Я немного порадую автора и может быть кого-нибудь еще, .NET 4 Beta 2 позволяет писать так:
if (source.HasFlag(Magic.Fire))
вместо
if ((source & Magic.Fire) != 0)
if (source.HasFlag(Magic.Fire))
вместо
if ((source & Magic.Fire) != 0)
+2
Sign up to leave a comment.
«Множества» в C#