PDA

View Full Version : مشکل با نوع متغییرها



zssmoa
دوشنبه 03 آبان 1389, 12:01 عصر
من یک serialport توی برنامه ام قرار داده ام و یک کلاس هم نوشتم که مقادیر مورد نیاز مثل boudrate ,paritybit و... رو بگیره و برای این کامپوننت ست کنه داخل سارنده ام هم آنها را مقدار دهی اولیه کرده ام با دو متغییر parity , stopbit که من آنها را از نوع string ,int گرفته ام مشکل داره و پیغام های زیر رو میده برای حلش چه کار باید بکنم.

Cannot implicitly convert type 'string' to 'System.IO.Ports.Parity


Cannot implicitly convert type 'int' to 'System.IO.Ports.StopBits'. An explicit conversion xists (are you missing a cast?)

Reza_Yarahmadi
دوشنبه 03 آبان 1389, 12:36 عصر
Parity و StopBits رشته اي نيستند enum هستند.
براي مقدار دهي ميتونيد هر 2 مقدار رو int بگيريد و زمان ست كردن به enum تبديل (Cast) كنيد

int parity = 2;
int stopBits = 1;
....StopBits = (System.IO.Ports.StopBits)stopBits;
....Parity = (System.IO.Ports.Parity)parity;

zssmoa
دوشنبه 03 آبان 1389, 12:59 عصر
خیلی ممنون
میشه اگه ممکنه در باره نوع ENUM یکم توضیح بدید من اطلاعی در این باره ندارم

Reza_Yarahmadi
دوشنبه 03 آبان 1389, 13:22 عصر
ميشه گفت enum نوع داده به حساب نمياد.(چيزي مثل Struct)
وقتي كه ميخوايد براي متغير خاصي تعيين كنيد كه فقط يك سري داده خاص قبول كنه بهترين راه استفاده از enum است. فرض كنيد ميخوايد متغيري داشته باشيد كه فقط ماههاي سال رو قبول كنه در اين حالت ابتدا يك enum درست ميكنيد كه ماههاي سال رو داره بعد متغير مورد نظرتون رو از نوع اين enum تعريف ميكنيد

enum Months
{
فروردين, ارديبهشت, خرداد, ... ,اسفند
}
Months m = Months.خرداد;
ايندكس گزاري اونها هم بصورت زير است
اولين عنصر 0 ، بعدي 1 ، ...
البته ميشه براي عنصرهاي دلخواه مستقيما ايندكس تعريف كرد

enum MyType
{
None = 2, Active = 5, Deactive = 3
}
enum براي ذخيره سازي به اندازه تعداد بيتي كه ميتوان بزرگترين ايندكس را در آن قرار داد حافظه اشغال ميكند.
براي تغيير مقدار متغير (m در مثال اول) ، هم بصورت بالا ميشه عمل كرد هم به روشي كه توي پست قبل گفتم.
براي اطلاعات تكميلتر توي همين سايت جستجو كنيد