PDA

View Full Version : سوال: عدم مقدار دهی متغیر در switch case



sara_mp
شنبه 14 آذر 1388, 10:50 صبح
این کد کجاش اشتباهه متغیر sath مقدار دهی نمیشه

string selestsath = cmb_sath.Items[cmb_sath.SelectedIndex].ToString();
int sath;
switch (selestsath)
{
case "مدیرسیستم":
sath = 1;
break;
case "کاربر عادی":
sath = 0;
break;

Beyondsoft
شنبه 14 آذر 1388, 11:04 صبح
سلام دوست عزیز

هیچ وقت شرط های شما "true" نیست که بخواهد مقدار دهی کند.

در واقع combobox شما این 2 مقدار را انتخاب نمی کند. شاید برای شما جای تعجب باشد، اما باید عرض کنم که گاهی این مشکل پیش می آید. سعی کنید در شرط خود به جای "ی" از "ي" استفاده کنید ویا بر عکس.
در واقع "ی" = d را استفاده نکرده و از "ي" = shift+x استفاده کنید.


در این جور مواقع بهتر است که یک break point بگذارید و خط به خط کد را امتحان کنید، تا متوجه شوید که اشکال دقیق از کجاست...

sara_mp
شنبه 14 آذر 1388, 13:04 عصر
ممنون از راهنمایی شما ولی من کارهایی که شما گفته بودید رو انجام دادم ولی جوhب نگرفتم حتی مقادیر combobox رو هم به جای فارسی به انگلیسی نوشتم باز هم متغیر sath مقدار دهی نشد .
فقط اینو فهمیدم که وقتی ماوس رو روی متغیر sath میبرم این رو مینویسه:

the variable sath is assigned but its value its never user

mosi_asgari
شنبه 14 آذر 1388, 22:44 عصر
سلام

اصولا با رشته مقایسه کردن کار اشتباهیه. سعی کن از همون خصوصیت SelectedIndex استفاده کنی که از نوع Integer می باشد و در switch خود با عدد مقایسه کنی.

در switch خودت از default هم استفاده کن تا اگر با هیچ شرطی برقرار نبود کد مربوط به default انجام شود.

یا علی

اَرژنگ
یک شنبه 15 آذر 1388, 09:24 صبح
ممنون از راهنمایی شما ولی من کارهایی که شما گفته بودید رو انجام دادم ولی جوhب نگرفتم حتی مقادیر combobox رو هم به جای فارسی به انگلیسی نوشتم باز هم متغیر sath مقدار دهی نشد .
فقط اینو فهمیدم که وقتی ماوس رو روی متغیر sath میبرم این رو مینویسه:

the variable sath is assigned but its value its never user

همانطوری که جناب mosi_asgari فرمودند:"اصولا با رشته مقایسه کردن کار اشتباهیه"
یا باید تایپ type بخوص و یا انوم enum استفاده کنید و یا اینکه از عدد ایندکس استفاده کنید.

Beyondsoft
یک شنبه 15 آذر 1388, 11:50 صبح
همانطوری که جناب mosi_asgari فرمودند:"اصولا با رشته مقایسه کردن کار اشتباهیه"
یا باید تایپ type بخوص و یا انوم enum استفاده کنید و یا اینکه از عدد ایندکس استفاده کنید.

اشتباه باشد یا نباشد به هر حال عملیست، و الآن مشکل یادگیری اصول صحیح برنامه نویسی نیست!

mosi_asgari
یک شنبه 15 آذر 1388, 12:54 عصر
اشتباه باشد یا نباشد به هر حال عملیست، و الآن مشکل یادگیری اصول صحیح برنامه نویسی نیست!

جناب محترم Beyondsoft.
من هم میدونم عملیست اما اگر با رشته مقایسه نمی کرد که سر این کد بسیار ابتدایی که گیر نمی کرد. بسیار مسلم است که sara_mp یک کاربر مبتدی است و سر این کد ساده گیر کرده است و احتمالا خوب Debug هم نمی تواند بکند خوب چه اشکالی داره که از همین الان با این اصول آشنا شود؟؟؟

بهتر نیست به جای این پست ، به sara_mp کمک می کردید تا مشکلش حل شود؟؟؟؟؟؟؟

خوب مسلمه که نمی تونید کمکی بکنید چون مشکلی از لحاظ کد نیست و فقط بی تجربگی و اشتباه برنامه نویس است.

من با اون پست خودم 2 کمک کردم به sara_mp:

1- سعی کردم که مشکلش را از راه دیگری حل کنم.
2- نوشتن کد بهتر و اصولی تر را هم متذکر شدم.

به هر حال از پست زیباتون متشکرم :تشویق:

اَرژنگ
یک شنبه 15 آذر 1388, 13:34 عصر
اشتباه باشد یا نباشد به هر حال عملیست، و الآن مشکل یادگیری اصول صحیح برنامه نویسی نیست!

اشتباه اصلی هم همین است!
استفاده از کارهایه من درآوردی برخلاف اصول اشکالات بیشتری ایجاد میکند تا حل.
ساختمانی که از بنا کج است به سافکاری نمیارزه.
خیلی وقتها استفاده از روش درست مشکلات (فرعی) موجود را به شکل خودکار حل میکند. حل کردن مشکل (فرعی) کمکی به بهبود یادگیری و کیفیت برنامه‌نویس و برنامه‌نویسی نمیکند.

FiACKER
یک شنبه 15 آذر 1388, 14:15 عصر
این کد رو استفاده کنید :

int sath;
switch (cmb_sath.SelectedIndex)
{
case 1:
sath = 1; //Modirator
break;
case 0:
sath = 0; //User
break;
}

البته این کد اضافی هست و می شه از راههای دیگه هم استفاده کرد :

int sath;
sath = cmb_sath.SelectedIndex;

کدها رو امتحان کنید.

Beyondsoft
یک شنبه 15 آذر 1388, 15:11 عصر
ابتدا از "FiACKER" بابت پاسخشون تشکر می کنم.

دوست من، ارژنگ و mosi_asgari حرف بنده از ره کینه نبود،
سخنان شما 2 دوست گرامی درست است، اما به نظرم بهتر بود مثل " FiACKER" کدی ارائه می دادید که راه گشا باشد !

اَرژنگ
یک شنبه 15 آذر 1388, 16:18 عصر
ابتدا از "FiACKER" بابت پاسخشون تشکر می کنم.

دوست من، ارژنگ و mosi_asgari حرف بنده از ره کینه نبود،
سخنان شما 2 دوست گرامی درست است، اما به نظرم بهتر بود مثل " FiACKER" کدی ارائه می دادید که راه گشا باشد !

۳ راه مختلف اراعه دادیم.
بدانه اینکه جواب بگیریم که با کدام روش پیش میخواهند برند همینطوری کدام کد را بفرستیم؟
اگر ببینیم یکی کج دارد پیش میره بهش میگیم روشش کجه. اینکه روش درست را انتخاب کرد و خاست که درست پیش بره و به کد مشکل داشت به کد کمک میکنیم.
اگر همه چی را براشان انجام بدیم دیگر چه برایه یادگیریشان باقی میماند؟
مشکل اصلی نداشتن کد برایه روش نبود، ندانستن روش درست بود، که هدایت کردیم.
تا جایی هم که معلوم بود ایشان روش کار کردن با کد را میدانستند، ولی از روش درست پیش نمیرفتند.
در ضمن آخرین مرحله کد کردن است (اگر برنامه‌نویسی درست یادگیری شده باشد).
این کد نیست که راه گشاست، فهمیدن اینکه روش درست چی هست در تمام زبانهایه برنامه نویسی یکسان باقی میماند، قبل از کد درک درست مسئله و روش درست راه حل مهم است، کد فقط پیاده‌سازی روش درست است همین.

در ضمن کد درست برایه این روش وجود ندارد.
روش درست کار کردن با کاربران از اکتیو دایرکتوری استفاده میکند، ولی وقتی که مسعله از بیخ خراب است اکتیو دایرکتوری را هم دیگر نمیشه انداخت وسط.