تبدیل انواع شمارشی

می‌توان انواع شمارشی را به دیگر مقادیر تبدیل کرد و بالعکس. مقادیر شمارشی در واقع مقادیر عددی هستند که برای درک بهتر آنها، به هر عدد یک نام اختصاص داده شده است. به مثال زیر توجه کنید :

   1: using System;
   2: 
   3: enum Direction
   4: {
   5:     North,
   6:     East,
   7:     South,
   8:     West
   9: }
  10: public class Program
  11: {
  12:     public static void Main()
  13:     {
  14:         Direction myDirection = Direction.East;
  15:         int myDirectionCode = (int)myDirection;
  16: 
  17:         Console.WriteLine("Value of East is {0}", myDirectionCode);
  18: 
  19:         myDirection = (Direction)3;
  20:         Console.WriteLine("nDirection: {0}", myDirection.ToString());
  21:     }
  22: }
Value of East is 1

Direction: West

در خط 14 متغیر myDirection را به مقدار East نوع شمارشی Direction اختصاص داده‌ایم. در حالت پیشفرض مقدار East در داخل آیتمهای این داده شمارشی 1 می‌باشد. در خط 15 نشان نحوه تبدیل یک آیتم از نوع شمارشی به عدد صحیح معادل آن به روش تبدیل صریح نشان داده شده است. نحوه این تبدیل به صورت زیر است:

variable = (DestinationDataType)enumerationVariable;

از آنجاییکه متغیر myDirectionCode (خط 15) از نوع int است در نتیجه یک مقدار int باید در آن قرار بگیرد. می‌توان به سادگی نوع داده مقصد را در داخل یک جفت پرانتز قرار داد و آن را کنار نوع شمارشی بگذارید (خط 15). نتیجه یک مقدار تبدیل شده را برگشت می‌دهد. در خط 19 معکوس این کار را انجام می‌دهیم. در این خط یک مقدار صحیح را به یک مقدار شمارشی تبدیل می‌کنیم. مقدار 3 را برابر آیتم West قرار می‌دهیم.
برای تبدیل آن از روشی شبیه به تبدیل یک نوع شمارشی به صحیح استفاده می‌کنیم (تبدیل صریح). به این نکته توجه کنید که اگر عددی را که می‌خواهید تبدیل کنید در محدوده انواع شمارشی نباشد، تبدیل انجام می‌شود ولی آن آیتم شمارشی و عدد برابر هم نیستند. به عنوان مثال :

myDirection = (Direction)10;

Console.WriteLine("Direction: {0}", myDirection.ToString());
Direction: 10

از آنجاییکه عدد 10 مقدار هیچ کدام از آیتمهای نوع شمارشی مثال بالا نیست (مقدار آیتمهای نوع شمارشی مثال بالا به ترتیب 0 و 1 و 2 و 3 می‌باشد) خروجی Console خود عدد را نشان می‌دهد ولی اگر به جای عدد 10 هر کدام از مقادیر عددی ذکر شده را قرار دهید آیتم معادل با آن نمایش داده خواهد شد.

تبدیل یک نوع رشته‌ای به یک نوع شمارشی

می‌توان یک نوع رشته‌ای را به نوع شمارشی تبدیل کرد. مثلاً می‌خواهید رشته “West” را به نوع شمارشی Direction.West مثال بالا تبدیل کنید. برای این کار باید از کلاس Enum و فضای نام System به صورت زیر استفاده کنید :

Direction myDirection = (Direction)Enum.Parse(typeof(Direction), "West");

Console.WriteLine("Direction: {0}", myDirection.ToString());
Direction: West

متد Enum.Parse() دارای دو پارامتر است. اولین پارامتر نوع شمارشی است. با استفاده از عملگر typeof نوع شمارشی را برگشت می‌دهیم. دومین پارامتر، رشته‌ای است که قرار است به نوع شمارشی تبدیل شود. چون مقدار برگشتی از نوعشی (object) است بنابراین یک تبدیل مناسب نوع شمارشی لازم است. با این جزییات الان می دانیم که چگونه یک رشته را به نوع شمارشی تبدیل کنیم.

enumType name = (enumType)Enum.Parse(typeof(enumType), string);

اگر رشته‌ای که به متد ارسال می‌کنید جز آیتمهای داده شمارشی نباشد با خطا مواجه می‌شوید.