PDA

View Full Version : مبتدی: ساده کردن if



Faraz Mehraien
سه شنبه 27 اسفند 1392, 11:15 صبح
با سلام .من می خواستم این if با یه عبارت ساده تر جایگزین کنم....اگر هم همینو توضیح کامل بدید و بعد یه دونه ساده ترشو بگید خیلی خوب می شه
if( ! DateTime.TryParse(textBox1.Text, out time))

time یک شی از کلاس datetime می باشد.....

Mojtaba.Shateri
سه شنبه 27 اسفند 1392, 11:48 صبح
من دقیقا منظورتونو نفهمیدم. اگه منظورتون قابل فهم تر بودن کد هست میتونید از کد زیر استفاده کنید (البته اگه براتون قابل فهم تر باشه:لبخند:):
bool isValid = (! DateTime.TryParse(textBox1.Text, out time)) ? true : false;

if (isValid)
{
//کد مورد نظر
}

Faraz Mehraien
سه شنبه 27 اسفند 1392, 12:02 عصر
من دقیقا منظورتونو نفهمیدم. اگه منظورتون قابل فهم تر بودن کد هست میتونید از کد زیر استفاده کنید (البته اگه براتون قابل فهم تر باشه:لبخند:):
bool isValid = (! DateTime.TryParse(textBox1.Text, out time)) ? true : false;

if (isValid)
{
//کد مورد نظر
}


اینکه تقریبا همونه.....اون علامت تعجب و علامت سوال برای چیه دیگه؟؟؟
اگر هم امکان داره کمی درباره ی parse توضیخ بدین...ممنون

Mojtaba.Shateri
سه شنبه 27 اسفند 1392, 12:48 عصر
شما اگه دقیقا بگی میخوی چیکار کنی شاید بتونم راه حل بهتری بهت بدم.
اون یه مدل انتساب شرطیه.
متد TryPars تبدیل یک نوع (مثلا int یا double )به رشته را انجام میده.
پارامتر اول رشته و پارامتر دوم متغیری که حاصل در اون ریخته میشه.
خروجی این متد true یا false است.
زمانی false بر میگرداند که رشته عددی نباشد.

Mousavmousab
سه شنبه 27 اسفند 1392, 12:58 عصر
اینکه تقریبا همونه.....اون علامت تعجب و علامت سوال برای چیه دیگه؟؟؟
اگر هم امکان داره کمی درباره ی parse توضیخ بدین...ممنون


دوست عزیز شما باید یکم مطالعه بیشتری داشته باشی.
نات یا Not یا !
یعنی نقیض یعنی نباشد- این طور نباشد که ...

توصیه می کنم یک کتاب دانلود کنید و سی شارپ و سینتکس های آن را بیشتر مطالعه کنی.
موفق باشی

mahmoudii
سه شنبه 27 اسفند 1392, 13:02 عصر
سلام
فرض کنید ما یک نوع رشته ای (textbox1.text)رو داریم و میخوایم به نوع دیگه ای تبدیلش کنیم اما مقادیری که به عنوان رشته داریم میفرستیم ممکنه معتبر نباشه ( مثلا اگه textbox خالی باشه میشه یک داده نامعتبر)برای اینکه جلوی این اشتباهات رو بگیریم از tryparse استفاده میشه

یعنی تو مثالی که گفتین داره شرط میذاره که اگه اون مقدار رشته ای رو به datetime میشه تبدیل کرد(متد جواب TRUE برمیگردونه) با استفاده از (!) Not مقدارش رو FALSE کنه و بعدش یه کارایی باید انجام بشه که شما بقیش رو ننوشتی

Mojtaba.Shateri
سه شنبه 27 اسفند 1392, 14:20 عصر
خب همین کدی که دیدی کار میکنه قابل فهم هست و قاعده refactoring رو رعایت میکنه.

Faraz Mehraien
سه شنبه 27 اسفند 1392, 16:56 عصر
ممنون از همگی ...نمی شه از ! استفاده نکرد و به جای tryparse از convert to استفاده کرد؟؟؟؟؟؟؟
اگه می شه لطفا کدشو بذارید چون این tryparse رو خوب درک نمی کنم....
بازم ممنون
دقیقا می خوام ساعتی که در فرم درست کردمو بشه تنظیم کرد ولی کاربر متغیر صحیح وارد کنه....کد ساعتو و تغییر اونو زدم و توش مشکلی نیست فقط برای اینکه کاربر عبارتی درست در textbox وارد کنه برام مشکله....

omid_kma
سه شنبه 27 اسفند 1392, 18:05 عصر
در ضمن این کد از این جا گذاشته شده ...
http://www.7khatcode.com/2217/%D8%AA%D9%86%D8%B8%DB%8C%D9%85-%D8%B3%D8%A7%D8%B9%D8%AA-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D8%B4%D8%AF%D9%87-%D8%AF%D8%B1-%D9%81%D8%B1%D9%85

Faraz Mehraien
چهارشنبه 28 اسفند 1392, 09:35 صبح
در ضمن این کد از این جا گذاشته شده ...
http://www.7khatcode.com/2217/%D8%AA%D9%86%D8%B8%DB%8C%D9%85-%D8%B3%D8%A7%D8%B9%D8%AA-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D8%B4%D8%AF%D9%87-%D8%AF%D8%B1-%D9%81%D8%B1%D9%85
خوب منم که نگفتم خودم کدو زدم ....!!!!چون درکش برام سخت بود پرسیدم

Mojtaba.Shateri
چهارشنبه 28 اسفند 1392, 13:05 عصر
اینم یک کد دیگه. ببخشید لب تاب پیشم نیست با notepad نوشتم شاید خطا سینتکسی داشته باشه:لبخند:
string txtDateTime = textBox1.Text;
bool isValid = true;
try
{
cultureName = "en-US";
time = Convert.ToDateTime(txtDateTime, cultureName);
//تبدیل به درستی انجام گرفته ، بقی کد مورد نظر
}
catch(Exception ex)
{
isValid = false;
//اطلاعات نامعتبر وارد شده
//در ایجا هندل کن
//روشن کن ErrorProvider مثلا برای تکست باکست یک
}

isValid واسه این گذاشتم که شاید یه جا به دردت بخوره.

Faraz Mehraien
چهارشنبه 28 اسفند 1392, 15:28 عصر
اینم یک کد دیگه. ببخشید لب تاب پیشم نیست با notepad نوشتم شاید خطا سینتکسی داشته باشه:لبخند:
string txtDateTime = textBox1.Text;
bool isValid = true;
try
{
cultureName = "en-US";
time = Convert.ToDateTime(txtDateTime, cultureName);
//تبدیل به درستی انجام گرفته ، بقی کد مورد نظر
}
catch(Exception ex)
{
isValid = false;
//اطلاعات نامعتبر وارد شده
//در ایجا هندل کن
//روشن کن ErrorProvider مثلا برای تکست باکست یک
}

isValid واسه این گذاشتم که شاید یه جا به دردت بخوره.
این یه خط چی کار می کنه؟؟
cultureName = "en-US";


بعد این try برای چیه؟؟؟

Mojtaba.Shateri
چهارشنبه 28 اسفند 1392, 16:19 عصر
فقط نوع تاریخ رو نشون میده.
که در اینجا میلادیه.
try برای هندل کردن خطای احتمالیه time = Convert.ToDateTime(txtDateTime, cultureName); هستش.

Faraz Mehraien
چهارشنبه 28 اسفند 1392, 16:23 عصر
فقط نوع تاریخ رو نشون میده.
که در اینجا میلادیه.
try برای هندل کردن خطای احتمالیه time = Convert.ToDateTime(txtDateTime, cultureName); هستش.
به جای culturename نمی شه از یه چیزه دیگه استفاده کرد؟؟

Mojtaba.Shateri
چهارشنبه 28 اسفند 1392, 16:35 عصر
چرا که نشه. میشه :)
string[] cultureNames = { "en-US", "ru-RU","ja-JP" };

Faraz Mehraien
چهارشنبه 28 اسفند 1392, 16:39 عصر
چرا که نشه. میشه :)
string[] cultureNames = { "en-US", "ru-RU","ja-JP" };
نه منظورم این بود که کال از culturename استفاده نشه...می شه از فرمت های زمان مثل hh:mm:ss استفاده کرد؟؟

Mojtaba.Shateri
چهارشنبه 28 اسفند 1392, 16:47 عصر
شما داری متن رشته ای رو به Datetime تبدیل میکنی.
اگه خواستی خروجی رشته ای بگیری با فرمت hh:mm:ss میتونی DateTime رو به شکل زیر استفاده کنی.
time = Convert.ToDateTime(txtDateTime, cultureName).ToString("hh:mm:ss");
یا
time = Convert.ToDateTime(txtDateTime, cultureName).ToLongTimeString();