PDA

نسخه کامل مشاهده نسخه کامل : معادل کدهای VB در C#



bad_boy_2007
06-05-2009, 23:17
سلام دوستان
من دارم چند تا از قسمتهای جدید برنامم رو با C# مینویسم ولی تا الان خیلی کم باهاش کد نوشتم میشه لطفا در مورد کدهای معادل زیر کمکم کنید ؟
یک چند تا سایت بود که معادل رو میداد ولی درست کار نمیکرد یا من نمیتونستم معادلش رو در بیارم !؟

معادل دستور چک کردن DBNull :
کد VB رو اینطور مینوشتم :

If NotISDBNull(Field) then
.....
end if

یکم سرچ زدم به کد زیر برای معادل #C رسیدم ولی بازم Eception میده که میخوای مقدار DBNull رو بخونم !

If(!Conversion.isdbnull(Field))
{
....
}


معادل دستور Val تو VB :
مثلا قبلا تو VB وقتی میخواستم مقدار یک تکست باکس رو که ممکن بود "" هم باشه رو بخونم ، مینوشتم :
Item=Val(textbox1.text)

معادل C# رو پیدا کردم این بود :
Microsoft.Visualbasic.val...

و درست هم کار میکرد ولی فکر میکنم تو C# صحیح نباشه از این استفاد کنم !؟

kiuhnmgtrdcv
07-05-2009, 11:11
برنامه هایی وجود داره که کدای شما رو از vb به c# میبره در هر حال


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
07-05-2009, 11:40
سلام
کلاس Microsoft.VisualBasic.Conversion در واقع کلاس اصلی است که همین متدهای VB6 را برای VB.Net پیاده سازی میکند.

ولی در کل پیشنهاد میکنم از سینتکسها استاندارد دات نت استفاده کنید.
یعنی در خود VB.Net هم بهتر است دستورات قدیمی VB6 را فراموش کنید.

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

=====

در مورد دستور اولتان اینها معادلهای خالص دات نتی هستند.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

=====

در مورد دستور دوم هم ...
متدهای parse اصلی دات نت که وظیفه این تبدیل را بر عهده دارند در خود تیپ ها مستقر هستند و سر راست ترین معادل اینها هستند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ضمناً در برنامه های عادی، پیشنهاد میکنم در گرفتن اعداد، به جای TextBox از کنترلر مخصوص NumericUpDown استفاده کنید.
کنترلر فوق میتواند محدود Min و Max ای برای عدد مشخص کند و برای افزایش و کاهش با دکمه هایش میتواند پله ای مشخص کنید و ...

=====

برای این نوع تبدیلات کلاس System.Convert هم بد نیست، البته اغلب متدهای این کلاس، متدهای اصلی را در جای دیگر فراخوانی میکنند و معادلهای دیگری دارند ولی بالاخره جمع و مجتمع کردن این متدها در یک کلاس واحد هم خودش به ذات ارزشمند است.

موفق باشید.

bad_boy_2007
07-05-2009, 22:06
سلام
کلاس Microsoft.VisualBasic.Conversion در واقع کلاس اصلی است که همین متدهای VB6 را برای VB.Net پیاده سازی میکند.

ولی در کل پیشنهاد میکنم از سینتکسها استاندارد دات نت استفاده کنید.
یعنی در خود VB.Net هم بهتر است دستورات قدیمی VB6 را فراموش کنید.

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

=====

در مورد دستور اولتان اینها معادلهای خالص دات نتی هستند.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

=====

در مورد دستور دوم هم ...
متدهای parse اصلی دات نت که وظیفه این تبدیل را بر عهده دارند در خود تیپ ها مستقر هستند و سر راست ترین معادل اینها هستند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ضمناً در برنامه های عادی، پیشنهاد میکنم در گرفتن اعداد، به جای TextBox از کنترلر مخصوص NumericUpDown استفاده کنید.
کنترلر فوق میتواند محدود Min و Max ای برای عدد مشخص کند و برای افزایش و کاهش با دکمه هایش میتواند پله ای مشخص کنید و ...

=====

برای این نوع تبدیلات کلاس System.Convert هم بد نیست، البته اغلب متدهای این کلاس، متدهای اصلی را در جای دیگر فراخوانی میکنند و معادلهای دیگری دارند ولی بالاخره جمع و مجتمع کردن این متدها در یک کلاس واحد هم خودش به ذات ارزشمند است.

موفق باشید.

سلام استاد ممنون از راهنمایی کاملتون :46:

با این دستور مشکل دارم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

درستور فوق اگه رشته تهی (در مورد اعداد رشته ای مشکل نداره) خطا میده ، خب حالا باید از همون تابع Val که تو فضای نام Microsoft.vb به نام Val بود استفاده کنم ؟ یا معادلش تو فضای نامهای دیگه هست ؟
مشکل با تابع Val از فضای نام قید شده رفع میشه فقط نمیدونم صحیحه که از فضای نام VB تو C# استفاده میکنم !؟


این کد رو نوشتم ولی باز هم Exception میده :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
با Reflector یک DLL ویژوال بیسیک رو دکامپایل کردم دیدم که از فضای نام Microsoft.vb.information.isdbnull استفاده کرده که ظاهرا باید معادل System.conver.isdbnull باشه و تست هم کردم ولی باز هم خطا میده

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
08-05-2009, 12:47
سلام

درستور فوق اگه رشته تهی (در مورد اعداد رشته ای مشکل نداره) خطا میده ، خب حالا باید از همون تابع Val که تو فضای نام Microsoft.vb به نام Val بود استفاده کنم
این مطلب اصلاً و ابداً دلیل خوبی برای استفاده از توابع قدیمی مثل Val نیست، چه در C#.Net و چه در VB.Net .

- شما به راحتی میتوانید با یک if حالت فوق را تشخیص دهید...
- میتوانید با یک دستور Try تابع خودتان را بسازید!

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

- تازه دو مطلب فوق را گفتم تا بدانید همیشه راه حلی وجود دارد، ولی در این مورد شما میتوانید الز تابع TryParse استفاده کنید.
TryParse هیچگاه خطا نمیدهد، اگر تبدیل کند، true برمیگرداند و اگر نتواند false
اگر هم خیلی مشتاق تابع Val هستند، پیشنهاد میکنم کد زیر را به پروژه تان اضافه کنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اگر هم میخواهید ورودیتان فقط string نباشد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

میتوانید هم هر دو کد فوق با ورودی string و object را با هم به برنامه تان اضافه کنید، با توجه به قابلیت overload و متفاوت بودن امضای دو تابع مشکلی پیش نمی آید.


این کد رو نوشتم ولی باز هم Exception میده
از شما بعید است! این حرفها را نزید! تا شب هم بنویسید، با هر تابعی هم بنویسید باز خطا میدهد!!!!
عزیز جان ... شما دارید از TypedDataSet استفاده میکنید!

اصلاً دقت کردید خروجی خصیصه PardakhtID چی است؟ احتمالاً خروجی اش int است!!!!!
به نظر شما int میتواند null یا dbnull یا string یا object و... و... باشد؟؟؟؟؟
آیا خروجی PardakhtID هموراه فقط و فقط و الزاماً یک int نیست؟؟؟

لطفاً روی PardakhtID در پروزه خودتان راست کلیک کنید و فرمان Go To Definition بدهید...
با دستوری مثل این روبرو خواهید شد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در PardakhtID که شما فراخوانی میکنید، یک تبدیل ضمنی اتفاق می افتد و بعد دیتای آماده و نوع دار (Typed) که در اینجا int است تحویل شما میشود.
اگر فید مذکور نتواند به int تبدیل شود، اصلاً ذات فراخوانی PardakhtID به خطا خواهد خورد!

کدهای صحیح:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

موفق باشید.

bad_boy_2007
08-05-2009, 14:56
ممنون استاد از وقتی که گذاشتین :11:
در مورد اول از TryPars استفاده میکنم
دو مورد دوم هم با دستور
if (!dr.IsPardakhtIDNull()) str.PardakhtSTR.ID = dr.PardakhtID;
مشکلم رفع شد
باز هم ممنون خیلی خیلی کمک کردین :46:

BabyBoy
13-05-2009, 23:31
ولي فكر مي كنم كه اگه برنامه ي Dot Net Reflector رو هم يه نگاهي بندازي بد نيست

نرم افزارش كاملا رايگانه و از خود سايت Red Gate مي توني دانلودش كني