এনামগুলি অবশ্যই কোডটিকে আরও পঠনযোগ্য করে তুলতে পারে। নজরদারি করার জন্য এখনও কয়েকটি জিনিস রয়েছে (অন্তত নেট মধ্যে)
একটি এনামের অন্তর্নিহিত স্টোরেজটি কোনও আন্ত হিসাবে, ডিফল্ট মান শূন্য হবে, সুতরাং আপনার 0 টি বোধগম্য ডিফল্ট কিনা তা নিশ্চিত হওয়া উচিত। (উদাহরণস্বরূপ, স্ট্রাক্টগুলির সকল ক্ষেত্র শূন্যে সেট করা আছে, সুতরাং 0. ব্যতীত অন্য কোনও ডিফল্ট নির্দিষ্ট করার উপায় নেই) যদি আপনার 0 মান না থাকে, আপনি এমনকি এনটকে বিন্যাস ছাড়াই এনাম পরীক্ষা করতে পারবেন না, যা হবে খারাপ শৈলী।)
যদি আপনার এনামগুলি আপনার কোডটিতে ব্যক্তিগত থাকে (কখনই প্রকাশ্যে প্রকাশিত হয় না) তবে আপনি এখানে পড়া বন্ধ করতে পারেন।
যদি আপনার এনামগুলি কোনও উপায়ে বাহ্যিক কোডে প্রকাশিত হয় এবং / বা প্রোগ্রামের বাইরে সংরক্ষণ করা হয় তবে সেগুলি স্পষ্টভাবে সংখ্যায়িত করার বিষয়টি বিবেচনা করুন। সংকলকটি স্বয়ংক্রিয়ভাবে তাদের 0 থেকে সংখ্যা করে, তবে আপনি যদি তাদের এনামগুলিকে মান না দিয়ে পুনর্বিন্যাস করেন তবে আপনি ত্রুটিগুলি দিয়ে শেষ করতে পারেন।
আমি আইনত লিখতে পারি
WriteMode illegalButWorks = (WriteMode)1000000;
file.Write( data, illegalButWorks );
এটির বিরুদ্ধে লড়াই করতে, কোনও এনাম গ্রহন করে এমন কোনও কোড যা আপনি নিশ্চিত হতে পারবেন না (যেমন পাবলিক এপিআই) এনামটি বৈধ কিনা তা পরীক্ষা করা দরকার। আপনি এটি মাধ্যমে
if (!Enum.IsDefined(typeof(WriteMode), userValue))
throw new ArgumentException("userValue");
এর একমাত্র সতর্কতা Enum.IsDefinedহ'ল এটি প্রতিবিম্ব ব্যবহার করে এবং ধীরে ধীরে। এটি একটি সংস্করণ সমস্যা ভোগ করে। আপনার যদি প্রায়শই এনাম মানটি পরীক্ষা করতে হয় তবে নীচের থেকে ভাল হতে পারেন:
public static bool CheckWriteModeEnumValue(WriteMode writeMode)
{
switch( writeMode )
{
case WriteMode.Append:
case WriteMode.OverWrite:
break;
default:
Debug.Assert(false, "The WriteMode '" + writeMode + "' is not valid.");
return false;
}
return true;
}
ভার্সন ইস্যুটি হ'ল পুরানো কোডটি কেবলমাত্র আপনার কাছে থাকা 2 এনামগুলিকে কীভাবে পরিচালনা করতে হবে তা জানতে পারে। যদি আপনি একটি তৃতীয় মান যোগ করেন তবে এনাম.আইএসডিফাইন্ডটি সত্য হবে, তবে পুরানো কোডটি প্রয়োজনীয়ভাবে এটি পরিচালনা করতে পারে না। উপস।
[Flags]এনামগুলির সাথে আপনি আরও মজা করতে পারেন এবং এর জন্য বৈধতা কোডটি কিছুটা আলাদা।
আমি এটাও লক্ষ্য করবেন যে বহনযোগ্যতা, আপনি কল ব্যবহার করা উচিত ToString()enum উপর, এবং ব্যবহার Enum.Parse()যখন তাদের মধ্যে ফিরে পড়া চালিয়ে যান। উভয় ToString()এবং Enum.Parse()সব ব্যবস্থা করতে সক্ষম [Flags]enum হিসাবে ভাল, তাই তাদের ব্যবহার করার জন্য নয় কোনো কারণ। মনে মনে, এটি আরও একটি অসুবিধা, কারণ এখন আপনি সম্ভবত কোড ভঙ্গ ছাড়া এনামের নামও পরিবর্তন করতে পারবেন না।
সুতরাং, কখনও কখনও আপনি যখন নিজেকে জিজ্ঞাসা করেন কেবল তখনই আপনাকে উপরের সমস্তটি ওজন করতে হবে যখন আমি কেবল একটি বুল নিয়ে পালিয়ে যেতে পারি?