ගණන් [Flags]
කළ හැකි අගය එක් අගයකට වඩා හැකි අගයන් එකතුවක් නිරූපණය කරන සෑම අවස්ථාවකම ගුණාංගය භාවිතා කළ යුතුය. එවැනි එකතු කිරීම් බොහෝ විට බිට්වේස් ක්රියාකරුවන් සමඟ භාවිතා කරයි, උදාහරණයක් ලෙස:
var allowedColors = MyColor.Red | MyColor.Green | MyColor.Blue;
[Flags]
ගුණාංගය මෙය තනිවම සක්රීය නොකරන බව සලකන්න - එය කරන්නේ ක්රමවේදය අනුව හොඳ නිරූපණයකට ඉඩ දීම පමණි .ToString()
:
enum Suits { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 }
[Flags] enum SuitsFlags { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 }
...
var str1 = (Suits.Spades | Suits.Diamonds).ToString();
// "5"
var str2 = (SuitsFlags.Spades | SuitsFlags.Diamonds).ToString();
// "Spades, Diamonds"
එනුම් අගයන් දෙකක බලයන් ස්වයංක්රීයව සිදු [Flags]
නොවන බව සැලකිල්ලට ගැනීම වැදගත්ය . ඔබ සංඛ්යාත්මක අගයන් මඟ හැරියහොත්, බිටුස් මෙහෙයුම් වලදී අපේක්ෂා කළ හැකි පරිදි එනුම් ක්රියා නොකරනු ඇත, මන්ද පෙරනිමියෙන් අගයන් 0 සහ වර්ධක වලින් ආරම්භ වේ.
වැරදි ප්රකාශය:
[Flags]
public enum MyColors
{
Yellow, // 0
Green, // 1
Red, // 2
Blue // 3
}
අගයන්, මේ ආකාරයෙන් ප්රකාශයට පත් කළහොත්, කහ = 0, කොළ = 1, රතු = 2, නිල් = 3. මෙය කොඩි ලෙස නිෂ් less ල වනු ඇත.
නිවැරදි ප්රකාශයක උදාහරණයක් මෙන්න:
[Flags]
public enum MyColors
{
Yellow = 1,
Green = 2,
Red = 4,
Blue = 8
}
ඔබේ දේපලෙහි ඇති සුවිශේෂී අගයන් ලබා ගැනීමට කෙනෙකුට මෙය කළ හැකිය:
if (myProperties.AllowedColors.HasFlag(MyColor.Yellow))
{
// Yellow is allowed...
}
හෝ .NET 4 ට පෙර:
if((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow)
{
// Yellow is allowed...
}
if((myProperties.AllowedColors & MyColor.Green) == MyColor.Green)
{
// Green is allowed...
}
ආවරණ යටතේ
මෙය ක්රියාත්මක වන්නේ ඔබ ගණනය කිරීමේදී දෙදෙනෙකුගේ බලතල භාවිතා කළ බැවිනි. ආවරණ යටතේ, ඔබේ ගණන් කිරීමේ අගයන් ද්විමය හා ශුන්ය වලින් පෙනේ:
Yellow: 00000001
Green: 00000010
Red: 00000100
Blue: 00001000
ඒ හා සමානව, ඔබ ද්විමය බිට්වේස් හෝ ක්රියාකරු භාවිතා කර ඔබේ දේපල අවසර ලත් රතු, කොළ සහ නිල් ලෙස සකසා ගත් පසු |
, අවසර ලත් වර්ණ මේ ආකාරයෙන් පෙනේ:
myProperties.AllowedColors: 00001110
එබැවින් ඔබ අගය නැවත ලබා ගන්නා විට ඔබ සැබවින්ම කරන්නේ බිට්වේස් සහ &
අගයන් මත ය:
myProperties.AllowedColors: 00001110
MyColor.Green: 00000010
-----------------------
00000010 // Hey, this is the same as MyColor.Green!
කිසිවක් නැත = 0 අගය
0
එම්එස්ඩීඑන් වෙතින් උපුටා දක්වමින් ඔබේ ගණන් බැලීමේදී භාවිතා කිරීම සම්බන්ධයෙන් :
[Flags]
public enum MyColors
{
None = 0,
....
}
ධජය ගණනය කළ නියතයේ අගය ලෙස ශුන්ය වන කිසිවක් භාවිතා නොකරන්න. ධජය සඳහා පරීක්ෂා කිරීම සඳහා ඔබට කිසිවක් ගණනය කළ නියතය බිට්වේස් සහ මෙහෙයුමක භාවිතා කළ නොහැක, මන්ද ප්රති result ලය සැමවිටම ශුන්ය වේ. කෙසේ වෙතත්, සංඛ්යාත්මක අගයේ කිසියම් බිටු සකසා තිබේද යන්න තීරණය කිරීම සඳහා සංඛ්යාත්මක අගය සහ කිසිවක් ගණනය කළ නියතය අතර සැසඳීමක් ඔබට තර්කානුකූලව කළ හැකිය.
කොඩි ගුණාංගය සහ එහි භාවිතය පිළිබඳ වැඩි විස්තර msdn හි සහ msdn හි කොඩි සැලසුම් කිරීම පිළිබඳ වැඩි විස්තර ඔබට සොයාගත හැකිය