SajjadKhati (22-12-18)
سلام به سجاد عزیزم
چرا کد زیر درسته
کد:Array myArray = new int[] { 12, 13, 14 }; foreach (int item in (int[])myArray) { MessageBox.Show(item.ToString()); }
اما کد زیر اشتباهه
کد:Array[] myArray = new int[] { 12, 13, 14 }; foreach (int item in (int[])myArray) { MessageBox.Show(item.ToString()); }
در صورتی که هم Array و هم []Array تابع GetEnumerator دارن.
این جمله را تکمیل کن
تابع GetEnumerator در دستور foreach ..........
چون نمی دونم کاربردش چیه نمی تونم تکمیلش کنم
آخرین ویرایش توسط Speed Racer در تاریخ 22-12-18 انجام شده است
SajjadKhati (22-12-18)
برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
سلام بر آقا آرشان
اینکه کد دوم اشتباست ، ربطی به اعضای یه کلاس (مثلا در اینجا ربطی به تابع GetEnumerator در این کلاس که گفتید) نداره . وظیفه ی GetEnumerator صرفا اینه که در حلقه ها ، عضو بعدی را مشخص کنه تا حلقه هر بار بتوه عضو بعدی را ببینه . این که کد دوم اشتباست ، به قواعد سی شارپ برمیگرده که رعایت نکردید.
کد دوم اشتباست چون وقتی نوع یه داده را Array مشخص کردید ، میدونید که باید مقدارش را آرایه بدید اما وقتی که نوع یه داده ای را Array[] (آرایه ای از Array ها) مشخص کردید (مثل کد دوم) ، دیگه مقدارش نمیتونه آرایه ی خشک و خالی باشه چون خود Array ، یه آرایه هست و وقتی یه آرایه ی دیگه هم کنارش میذارید ، باید مقدار را آرایه در آرایه بدید (یه آرایه برای Array و یه آرایه برای اون آرایه ای که کنار Array مشخص کردید) . در واقع در کد دوم ، باید مقدار آرایه در آرایه یا همون آرایه های دندانه ای (jagged array) بدید . بنابراین کد دوم را باید به این شکل تغییر بدید :
کد:Array[] myArray = new int[][] { new int[] { 12, 13 }, new int[] { 100, 200 } };
که بنابراین حلقه ی اش این جوری تغییر شکل پیدا میکنه :
کد:Array[] myArray = new int[][] { new int[] { 12, 13 }, new int[] { 100, 200 } }; foreach (int[] firstLevel in myArray) { foreach (int secLevel in firstLevel) { MessageBox.Show(secLevel.ToString()); } }
لازم هم نیست در حلقه ، myArray را به چیزی تبدیل کنید .
مبحث آرایه در آرایه (jagged array) ، در قسمت 20 گفته شد .
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
AMD>INTEL (22-12-18), QR7 (22-12-18), ravegoat (30-12-18), Speed Racer (22-12-18)
می شه این دو تا کد رو هم درست کنیبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط SajjadKhati برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
تو کد زیر همه رو object هم میذارم باز هم خطا می گیره
کد:object myArray = new object[] { 12, 15, 25, "salam",'A' }; foreach (object item in myArray) { MessageBox.Show(item.ToString()); }
کد زیر هم درست کن با []Array
کد:Array[] myArray = new double[] { 12, 15, 25.241 }; foreach (double item in (double[])myArray) { MessageBox.Show(item.ToString()); }
کلا نیازی هست که ما کد ها رو اینجوری بنویسیم. مثلا آرایه ای که از نوع Int هست ما اونو از نوع Array بنویسم و بعد توی foreach تبدیل کنیم. اصلا این روش کد نویسی استاندارد و درسته
مثلا به این صورت
مثلا این شکلی باشه که استاندارده که دیگه ما درگیر چند روش کد نویسی نشیمکد:Array myArray = new int[] { 12, 15, 18 }; foreach (int item in (int[])myArray) { MessageBox.Show(item.ToString()); }
کد:int[] myArray = new int[] { 12, 15, 18 }; foreach (int item in myArray) { MessageBox.Show(item.ToString()); }
SajjadKhati (22-12-18)
سلامی مجددبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
اولین کد :
نوع داده ای (یعنی سمت چپ مساوی) متغییری که میخواد توی هر حلقه ای قرار بگیره ، باید توی کلاس یا استراکچرِ (و هر چیز دیگه ای که هست) اون نوع داده ، تابعی بنام GetEnumerator تعریف شده باشه . اون حلقه (foreach ، for و ...) ، از این متد متوجه میشه که در تکرار (یا loop) بعدی ، چه مقداری یا چه عضوی از اون چیز (در اینجا آرایه) را میخونه.کد:object myArray = new object[] { 12, 15, 25, "salam", 'A' }; foreach (object item in (object[])myArray) { MessageBox.Show(item.ToString()); }
در این کدتون ، چون نوع داده ای myArray تون از نوع object هست و این نوع داده ای هم این تابع را نداره پس نمیتونه توی حلقه شرکت کنه . ولی وقتی myArray را در حلقه ، به نوع مقدارش ( آرایه ای از آبجکت ها یا object[] ) تبدیل میکنید ، چون آرایه ای از هر چیز ، از کلاس Array ارث بری میکنه (یعنی آرایه ای از آبجکت ها هم از کلاس Array ارث بری میکنه) و کلاس Array هم این تابع را داره ، پس مشکلی دیگه نیست
همونطور که در پست قبل گفتم ، وقتی نوع داده ای myArray را از نوع Array[] (آرایه ای از array) میگیرید ، پس باید در مقدارش (سمت راست مساوی) ، یه آرایه برای Array بودن اش بدین (چون همه ی آرایه ها از array ارث بری میکنن و نمیشه متغییری از نوع array باشه اما آرایه نباشه) و یه آرایه ی دیگه برای علامت آرایه ( ای که کنار نوع Array یعنی علامت [] ) که گذاشتید ، بدید. (قضیه ی آرایه در آرایه یا jagged array که در پست بالا مثال اش را گفتم)برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
اما وقتی مقدار متغییر myArray را آرایه ی یک بعدی میدید ، دیگه نباید نوع داده ای را از نوع Array[] بگیرید (دلیل اش را بالا گفتم) . صرفا کافیه از نوع Array بگیرید :
کد:Array myArray = new double[] { 12, 15, 25.241 }; foreach (double item in (double[])myArray) { MessageBox.Show(item.ToString()); }
البته همونطور که گفتم ، لازم هم نیست در حلقه ها ، هر بار متغییرتون (در اینجا myArray) را تبدیل کنید ( در اینجا double[] ) . این تبدیل ، اغلب اوقات نیاز نیست ولی میتونین هم انجام بدین .
برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
نیاز که بستگی داره . اما کلا کاربرد داره و همچین کدنویسی ای انجام میشه (منظورم نوع داده ای پدر یا اجداد و شی از نوع فرزند یا نوادگان هست) . اگه درکش یه کم سخت هه ، بخاطر اینه که باید مباحث شی گرایی را هم بدونی (قسمت 26 به بعد) . بنابراین اگه اینجا سخت متوجه میشی ، زیاد نگران نباش و خیلی روشون تمرکز نکن .
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
ravegoat (30-12-18), Speed Racer (23-12-18)
خیلی ممنونم آقا سجاد از توضیحات کامل شمابرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط SajjadKhati برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
سوالی درباره sql server
الان من اگه بخوام sql server از روی کتاب یاد بگیرم می تونم از همون visual studio 2017 استفاده کنم یا باید حتما sql server 2017 یا SQL Server Management Studio رو نصب کنم.بین این دو تا هم گیر کردم که کدوم برای کار من مناسبه.
خود visual studio 2017 Professional تمام دستورات و موارد مورد نیاز sql server که توی کتاب توضیح داده می شه رو توی خودش داره.
SajjadKhati (23-12-18)
سلامی مجددبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
خواهش میکنم.
من زیاد اس کیو ال کار نکردم ولی در حد همون قدر ، اس کیو ال سرور خود ویژال استودیو برام کافی بود .
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
Speed Racer (23-12-18)
در کد زیربرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط SajjadKhati برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
می تونیم بگیم که این آرایه از نوع object است یا اگه نمی تونیم بگیم دقیقا این جمله به چه صورت می شه.کد:object myArray = new object[] { };
این آرایه از ..... object است
SajjadKhati (24-12-18)
برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
همیشه ، نوعِ یه متغییر را از سمت چپ مساوی تشخیص بده . یعنی مثلا در کد :
متغییر myArray ، از نوع Array هست . چون سمت چپ مساوی ، نوع Array هست .کد:Array myArray = new double[] { 12, 15, 25.241 };
این را هم بدون که اعضایی که در اینتل لایسنس (صفحه ی راهنما موقع کد نوشتن) لیست میشه ، فقط نوع داده ای (در کد بالا ، نوع Array) را میشناسه . یعنی به مقدار و شی ای که در سمت راست مساوی مینویسیم کاری نداره و اعضای اونو نمیشناسه (مگر اینکه بعدا خودمون تبدیل کنیم)
سمت راست مساوی ، مقدار یا شی داده میشه (که میتونه برابر با خود نوع داده ای ای که در سمت چپ مساوی گذاشتیم باشه یا میتونه از نوع فرزند یا نوادگان نوع داده ای سمت چپ باشه) .
این مباحث ، به شی گرایی ربط داره که در اونحا مفصل توضیح داده شد .
بنابراین در کدی که دادی :
کد:object myArray = new object[] { };
نوع داده ای object هست اما شی (سمت راست مساوی) ، از نوع آرایه ای از object هاست (نه اینکه شی ای از object ها باشه ها) .
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
ravegoat (30-12-18), Speed Racer (24-12-18)
فکر کنم کم کم داری عصبانی می شی انقدر سوال می پرسم.برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط SajjadKhati برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
تو این جمله گفتی
می دونیم که آرایه فقط با دستور foreach عمل می کنه که عضوهاش رو بخونه. پس چرا شما از حلقه for و ... نام بردی مگه می شه با حلقه for و while عضوهای یک آرایه رو خوند.تابعی بنام GetEnumerator تعریف شده باشه . اون حلقه (foreach ، for و ...) ، از این متد متوجه میشه که در تکرار (یا loop) بعدی ، چه مقداری یا چه عضوی از اون چیز (در اینجا آرایه) را میخونه.
چون اگه for برای نوع int و double و ... باشه که اینا تابع GetEnumerator ندارن و اصلا نیازی هم به این تابع ندارن چون خونده میشن ومشکلی از این بابت ندارن.
SajjadKhati (24-12-18)
برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
نمیدانم از کجای حرفم میگی عصبانی میشم! برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
بله میشه . فقط با دستور و حلقه ی foreach نیست :
کد:کد:Button[] btnArray = new Button[3]; btnArray[0] = new Button(); btnArray[0].Text = "button 1"; btnArray[1] = new Button { Text = "button 2" }; btnArray[2] = new Button { Text = "button 3" }; for (int i = 0; i < btnArray.Length; i++) { MessageBox.Show(btnArray[i].Text, "into For loop"); } int counter = 0; while (counter < btnArray.Length) { MessageBox.Show(btnArray[counter].Text, "into While loop"); counter++; }
دقیقا متوجه نشدم منظورت چیه؟برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط Arshan935 برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
حلقه ها (for و while و foreach و ...) ربطی به نوع آرایه ندارن . همه شون از تابع GetEnumerator ای که در اون آرایه یا کالکشن (بعدا میخونی) وجود دارن ، عضو بعدی را متوجه میشن که کدوم مقدار را باید خوند . اگه یه نوعی که این تابع را نداشته باشه را توی هر کدوم از حلقه ها بذاری ، چون با اونه که صرفا مقدار بعدی را تشخیص میدن ، اون آرایه ، اون نوع را نمیپذیره و ارور میده (مثل نوع object) .
این را هم دقت کن که متغییری از نوع int یا نوع double را نیست که توی حلقه ها میذاری . بلکه متغییری از نوع آرایه ای از این نوع هاست (int[] و ...) که توی حلقه ها میذاری . هر آرایه ای (حالا از هر نوع میخواد باشه . چه آرایه ای از int ها یا آرایه ای از object ها یا هر آرایه ای از هر نوع دیگه) از کلاس Array ارث بری میکنه و این کلاس Array هست که متد GetEnumerator را داره .
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
ravegoat (30-12-18), Speed Racer (24-12-18)
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks