برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط 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 گفته شد .






پاسخ با نقل قول
Bookmarks