لا حاجة إلى التقدير يدويا تتضمن التعدادات FlagsAttribute دوت؟
-
05-07-2019 - |
سؤال
لإتاحة الفرصة لخيارات التنسيق مختلفة على الأسلوب الذي يعرض قصة إخبارية، لقد خلق سردا التي يمكن أن تنتقل في تحديد كيف يحصل على عرضه.
[Flags]
private enum NewsStyle
{
Thumbnail = 0,
Date = 1,
Text = 2,
Link = 4,
All = 8
}
string FormatNews( DataRow news, NewsStyle style )
{
StringBuilder HTML = new StringBuilder();
// Should the link be shown
if ( ((newsStyle & NewsStyle.All) == NewsStyle.All || (newsStyle & NewsStyle.Link) == NewsStyle.Link))
{
HTML.AppendFormat("<a style=\"text-decoration:none; color: rgb(66, 110, 171);\" href=\"ViewStory.aspx?nsid={0}\">",
UrlEncode(newsStory["NewsStoryID"].ToString()));
}
// Etc etc...
}
// So to call the method...
Response.Write( FormatNews( news, NewsStyle.Date | NewsStyle.Text ) );
والمشكلة هي أنني لا يمكن إلا أن الحصول على رمز للعمل إذا أنا يدويا تحديد القيم على التعداد، وإلا لا يعمل عملية أحادي المعامل التعداد التحقق بشكل صحيح.
ولقد تابعت دائما حكم السماح صافي التعامل مع تكليف القيم تتضمن التعدادات - هل هذا الاستثناء geniuine
المحلول
نعم، هو استثناء حقيقي. التعدادات هي من القيم الافتراضية المعينة من 0 فصاعدا، كل واحد 1 أعلى من القيمة السابقة، بغض النظر عن أي FlagsAttribute
s. (هناك بالطبع قواعد أكثر تفصيلا لعند تحديد بعض القيم يدويا - راجع في مستندات MSDN )
ولئن كان ل<م> إلى حد ما م> معنى أن يكون تعداد أعلام تلقائيا على القيم في صلاحيات اثنين، وأرى الأسباب التي ربما من الأفضل عدم قيام بذلك:
ومن المعقول تماما أن يكون هناك تعداد مثل هذا:
[Flags]
enum Foo
{
None,
Bar,
Baz,
BarAndBaz
}
وهذا بالطبع يتطلب القيم لتكون 0، 1، 2 و 3 لتكون معقولة.
وانها تريد ان تكون جميلة غير بديهية للسماح بحضور مجرد سمة تغير معنى كامل لقطعة من C # رمز. نظر لي Foo
سبيل المثال التعداد. يجب إزالة السمة Flags
أن يسمح لكسر الشفرة عن طريق تغيير بصمت قيم العداد؟
نصائح أخرى
نعم، لديك لتحديد القيم في التعداد للحصول على قيم العلم واضاف للعمل بشكل صحيح (لتكون قادرة على الجمع بين علمين التعداد وليس لديها هذا الصراع القيمة مع العلم آخر معين). لم يكن لديك لتحديد القيم للحصول عليه لتجميع، ولكن النتيجة الأكثر احتمالا لا يكون الشخص الذي تبحث عنه.