PDA

View Full Version : تفاوت روش های تبدیل نوع



maktab
سه شنبه 30 شهریور 1389, 00:27 صبح
همان طور که می دانید روش های مختلفی برای تبدیل نوع ها وجود داره! ولی هر کدام چه مزیتی دارند و چه تفاوتی با هم می کنند؟
مثلا:اگر a را یک متغیر در نظر بگیریم خواهیم داشت:


(int)a
int.parse(a)
a.ToInt32()

qqq2qqq
سه شنبه 30 شهریور 1389, 01:17 صبح
همان طور که می دانید روش های مختلفی برای تبدیل نوع ها وجود داره! ولی هر کدام چه مزیتی دارند و چه تفاوتی با هم می کنند؟
مثلا:اگر a را یک متغیر در نظر بگیریم خواهیم داشت:


(int)a
int.parse(a)
a.ToInt32()



سلام
دوست عزیز int(a) برای این است که a را زا یک نوع مثلا اعشاری به int بخواهید تبدیل کنید در اینجا a نمی تواند string باشد
اما int.parse(a) که a یک string می باشد که قابل تبدیل به عدد می باشد مثلا a="123" با این نوع تبدیل a برابر با 123 می شود و می توان با آن به عنوان یک عدد رفتار شود

موفق باشید

maktab
سه شنبه 30 شهریور 1389, 01:51 صبح
سلام
دوست عزیز int(a) برای این است که a را زا یک نوع مثلا اعشاری به int بخواهید تبدیل کنید در اینجا a نمی تواند string باشد
اما int.parse(a) که a یک string می باشد که قابل تبدیل به عدد می باشد مثلا a="123" با این نوع تبدیل a برابر با 123 می شود و می توان با آن به عنوان یک عدد رفتار شود

موفق باشید

خب بنا به گفته شما متد parse تمام کارها را انجام می ده. پس علت وجود بقیه چیه؟ ضمنا من int را مثال زدم در بقیه نوع ها چطوره؟

من مزیت و کاربرد هر روش را می خوام.

masy1366
سه شنبه 30 شهریور 1389, 02:12 صبح
داده ها کلا به دو روش به هم تبدیل می شن: موقع انتصاب داده به متغیر مثلا:

int inti=52; short ashort; decimal sum=3; inti=ashort; sum=inti;
یا با فرمول مثلا:

int inti=200; short ashort;
ashort=(short)inti

maktab
سه شنبه 30 شهریور 1389, 02:24 صبح
داده ها کلا به دو روش به هم تبدیل می شن: موقع انتصاب داده به متغیر مثلا:

int inti=52; short ashort; decimal sum=3; inti=ashort; sum=inti;
یا با فرمول مثلا:

int inti=200; short ashort;
ashort=(short)inti
خب اینا درسته! ولی تفاوتشون و کاربردشون؟
ضمنا برای روش فرمولیش من دوتا مثال زدم! کدام تابع بهتره؟ چرا؟
لطفا کامل توضیح بدید

ASKaffash
سه شنبه 30 شهریور 1389, 07:54 صبح
سلام
از نظر عملکردی همه یکسان هستند ولی اولی در C استاندارد است و همه جا همین است پیشنهاد من هم برای شما روش اول است که در C#‎ و ++C و C و Java ... معادل است

ایمان مدائنی
سه شنبه 30 شهریور 1389, 08:41 صبح
خب دوست عزيز اين تعريفها به تعداد اعداد بستگي داره مثلا toint32 مقدا 9 كاراكتر ميگيره و toint64 بيشتر كاراكتر ميگيره !

fjm11100
سه شنبه 30 شهریور 1389, 10:02 صبح
اولی با cast کردن شی رشته ای به صحیح سعی در تبدیل داره
دومی یک متد استاتیکه که تمام نوع های عددی این متد را برای تبدیل از رشته به عدد دارند.
سومی را من به این شکل ندیدم فکر کنم منظور شما Convert.ToInt32 بوده. که اگه اینطوره اینم یک متد از کلاس Convert است.
تا اینجا چشم بسته غیب گفتم نه؟
اما تفاوت اینها:
Convert.ToInt32 اگر مقدار رشته ات Null باشه صفر بهت میده اما Parse خطا میگیره. اما Parse چون شرط چک کردن Null نداره اندکی (خیلی کم سریعتره)
اما اولی با دو تای پائینی خیلی فرق داره و برای درکش باید با مفاهیم شی و شی گرایی مثل Boxing و UnBoxing بیشتر آشنا بشی. اما به زبون ساده اصلا ازش استفاده نکن چون Performance را نابود می کنه.
اما چرا همه اینها هست؟ خب چون به وقتش همه اینها لازمه. مثلا اولی کلا برای تبدیل اشیا به هم است و چون این دو نوع رشته ای و صحیح هم شی هستند اینو دارند. یا دومی وقتی مطمئنی Null نداری خب کمی سریعتر عمل میکنه

FastCode
سه شنبه 30 شهریور 1389, 11:37 صبح
اما اولی با دو تای پائینی خیلی فرق داره و برای درکش باید با مفاهیم شی و شی گرایی مثل Boxing و UnBoxing بیشتر آشنا بشی. اما به زبون ساده اصلا ازش استفاده نکن چون Performance را نابود می کنه.
اول از همه من قول داده بودم که دیگه فعالیتی توی بخش C# نداشته باشم ولی باید بگم که دقیقاً برعکس گفتی.
سرعت اولی از همه بهتره.هیچ exception و حالت خاصی هم نداره.همیشه از بقیه سریعتره.

cheshm6k
سه شنبه 30 شهریور 1389, 12:22 عصر
سلام.
اینجا : http://www.codeproject.com/KB/cs/AgileWare_Convert_Int32.aspx
به خوبی تفاوتها رو در قالب مثال توضیح داده . آخرشم به این نتیجه رسیده :


Convert.ToInt32 is better than Int32.Parse since it returns 0rather than an exception. But again, according to the requirement, this can be used. TryParse will be the best since it always handles exceptions by itself.

بسته به نیازتون انتخاب کنید که از کدوم روش استفاده کنید.

موفق باشید.