Pull to refresh

Comments 17

enum Magic
{
None = 0,

Fire = 1 << 0,
Air = 1 << 1,
Water = 1 << 2,
Earth = 1 << 3,
}

Чистое «Вуду» для некоторых «программистов» и никаких запоминаний степеней двойки.

Скажие каких «множеств» вам не хватает, термин уж больно общий без пояснений.
Я думаю, дельфийского наследия в стиле set of
почитал. синтаксически он сладок, но вот часто ли он нужен.
Блин прочитал ваш комент и думаю причём тут эльфийское наследие…
Могу ещё предложить такое «Вуду»:
enum Magic
{
None = 0,
Fire = 1,
Air = Fire << 1,
Water = Air << 1,
Earth = Water << 1,
}
но ваш метод очевиднее :)
UFO just landed and posted this here
Можно вопрос: а в какой сборке лежит класс Set?
UFO just landed and posted this here
Про "<<" Тоже известное «вуду». Просто про него чаще знают те, кто работал с C/C++ =)

А «множества», про которые я говорил, нужны, например, для такого (загрузить из базы список пользователей, определенного вида. например только программистов и менеджеров):

LoadEmployees (ref dsEmployees, EmployeeKind.Coder | EmployeeKind.Manager);
не вижу припятствий использовать Enum.
В MS SQL, MySQL, Oracle(за остальных не ручаюсь) есть операция «bitwise and». Пишите «where (e.Kind & employeeKind) <> 0» и получаете всех кодеров и менеджеров
я тоже не вижу препятствий =)

собственно пример в посте как раз и демонстрирует эту технику
если не подходит Enum, есть BitVector, на худой конец анонимный массив и LINQ:

var array = new[] { «Hello», «to», «You» };
array.Contains(«Hello»); // true
array.Intersect(new[] { «Hello», «You» }); // Hello, You
Немного придерусь
1. Множества (как класс в библиотеке) в С# всё-таки есть, и на любой вкус.
2. Пишите [Flags] вместо [FlagsAttribute]
>1. Множества (как класс в библиотеке) в С# всё-таки есть, и на любой вкус.

Про то, для чего нужно «множество», о котором я написал в этом посте, я написал и комментом выше и в самом посте:

«если где-то нужно передать в качестве аргумента функции несколько флагов»
+
LoadEmployees (ref dsEmployees, EmployeeKind.Coder | EmployeeKind.Manager);

Создавать специально обьект для множества всего лишь для одиночного вызова функции как-то не хочется.

>2. Пишите [Flags] вместо [FlagsAttribute]
спасиб, поправлю =)
Это как-то уже совсем не интересно. Скоро появятся статьи: пишем Hello world на C#.
Я немного порадую автора и может быть кого-нибудь еще, .NET 4 Beta 2 позволяет писать так:

if (source.HasFlag(Magic.Fire))
вместо
if ((source & Magic.Fire) != 0)
Класс, только я хотел предложить написать extension method как раз для этого.
Sign up to leave a comment.

Articles