এটি করার Theতিহ্যগত উপায় হ'ল Flags
একটিতে বৈশিষ্ট্যটি ব্যবহার করা enum
:
[Flags]
public enum Names
{
None = 0,
Susan = 1,
Bob = 2,
Karen = 4
}
তারপরে আপনি নিম্নলিখিত হিসাবে একটি নির্দিষ্ট নামের জন্য পরীক্ষা করতে চাই:
Names names = Names.Susan | Names.Bob;
bool susanIsIncluded = (names & Names.Susan) != Names.None;
bool karenIsIncluded = (names & Names.Karen) != Names.None;
লজিকাল বিটওয়াইস সংমিশ্রণগুলি মনে রাখা শক্ত হতে পারে, তাই আমি একটি FlagsHelper
শ্রেণীর সাহায্যে নিজের জীবনকে সহজ করে তুলি *:
public static class FlagsHelper
{
public static bool IsSet<T>(T flags, T flag) where T : struct
{
int flagsValue = (int)(object)flags;
int flagValue = (int)(object)flag;
return (flagsValue & flagValue) != 0;
}
public static void Set<T>(ref T flags, T flag) where T : struct
{
int flagsValue = (int)(object)flags;
int flagValue = (int)(object)flag;
flags = (T)(object)(flagsValue | flagValue);
}
public static void Unset<T>(ref T flags, T flag) where T : struct
{
int flagsValue = (int)(object)flags;
int flagValue = (int)(object)flag;
flags = (T)(object)(flagsValue & (~flagValue));
}
}
এটি আমাকে উপরের কোডটি আবার লিখতে অনুমতি দেবে:
Names names = Names.Susan | Names.Bob;
bool susanIsIncluded = FlagsHelper.IsSet(names, Names.Susan);
bool karenIsIncluded = FlagsHelper.IsSet(names, Names.Karen);
দ্রষ্টব্য আমি Karen
এটি করে সেটে যোগ করতে পারি:
FlagsHelper.Set(ref names, Names.Karen);
এবং আমি Susan
একইভাবে মুছে ফেলতে পারি :
FlagsHelper.Unset(ref names, Names.Susan);
* পোরজেস যেমন উল্লেখ করেছে, IsSet
উপরের পদ্ধতির একটি সমতুল্য ইতিমধ্যে Enum.HasFlag
। নেট 4.0: এ বিদ্যমান । Set
এবং Unset
পদ্ধতি, যদিও সমতুল আছে প্রদর্শিত না; সুতরাং আমি এখনও বলতে পারি এই শ্রেণীর কিছু যোগ্যতা রয়েছে।
দ্রষ্টব্য: এনামগুলি ব্যবহার করা এই সমস্যাটি মোকাবেলার কেবল প্রচলিত উপায়। পরিবর্তে ইনটগুলি ব্যবহার করার জন্য আপনি উপরের সমস্ত কোডটি সম্পূর্ণরূপে অনুবাদ করতে পারেন এবং এটি ঠিক তেমন কাজ করবে।