1- آیا آرایه ها هم با تخصیص حافظه یعنی
int[] a=new int[10]
مقدار می گیرند
پس چرا برای کد زیر خطا گرفته می شه
string[] a=new string[10];
listBox1.Items.Add(a);
ولی برای کد زیر خطا گرفته نمی شه؟
string[] a=new string[10];
messageBox.show(a);
1- آیا آرایه ها هم با تخصیص حافظه یعنی
int[] a=new int[10]
مقدار می گیرند
پس چرا برای کد زیر خطا گرفته می شه
string[] a=new string[10];
listBox1.Items.Add(a);
ولی برای کد زیر خطا گرفته نمی شه؟
string[] a=new string[10];
messageBox.show(a);
آخرین ویرایش به وسیله kamran_14 : چهارشنبه 27 اردیبهشت 1391 در 14:31 عصر
درstring[] a = new string[10];تخصیص حافظه صورت میگیره ولی مقدار نمیگیره.
اگر بنویسید
string[] a = new string[10];
listBox1.Items.Add(a[0]);
خطا میگیره چون مقدار null هست.
ولی اگر بنویسیدlistBox1.Items.Add(a);نوع آرایه رو به لیست اضافه میکنه نه مقدارشو.
درMessageBox.Show(a);هم خطا به خاطر اینه که باید یک رشته رو به متد شو بفرستید نه یک آرایه را. اگر میخواهید محتویاتش رو نشون بدید باید طریق اندیس به هر عنصر از آرایه دسترسی پیدا کنید.
سلام
اگه بخوایدهمراه با تعریف مقادیر رو نیز اختصاص بدید می تونید به این صورت بنویسید
string[] a ={ "1", "2", "3", "4" };
listBox1.Items.AddRange(a);
ممنون از جوابی که برام نوشتید
فقط نوع عددی اند که در هنگام تخصیص حافظه مقدار اولیه می گیرند؟مثلا:
int[] a=new int[10]
برای اینکه آرایه ای از رشته ها تعریف کنیم . می نویسیم:
string[] a=new string[500];
اما چون فقط تخصیص حافظه صورت می گیره و مقداری به این 500 ارایه نسبت داده نمیشه ممکنه در بعضی قسمتهای برنامه به علت استفاده از ارایه ی a خطا بده (به خاطر نداشتن مقدار). اما من می خوام قبل از اینکه این اتفاق بیفته به تمام خونه های آرایه ی a مقدار اولیه نسبت بدم تا چنین مشکلی به وجود نیاد. من چطوری می تونم تمام خونه های این آرایه رو هنگام اعلان پر کنم؟آیا این کار شدنیه یا نه؟
سلام
به نظر من با new فکر نکنم به نتیجه برسید چون رشته ها از نوع ارجاعی هستن و کامپایلر سی شارپ تمام انواع ارجاعی رو (بدون استثنا) با null ست می کنه
در مورد string هم چند لحظه پیش اینجا توضیحاتی دادم
این کد که تعریف یک آرایه ی رشته ای و دادن مقدار اولیه به آن است:
string a=new string[] {"1","2","3","4"}
با این نحوه ی تعریف چه فرقی داره؟
string a={"1","2"."3","4"}
سلام
تو این مورد هیچ فرقی ندارن (البته اگه اون نقطه بین 2 و 3 رو کاما حساب کنیم )
همون طور که که گفتم انواع اولیه(Primetive) نیازی به new ندارن ولی میشه استفاده کرد
مخصوصا در مورد string استفاده از new مگر در موارد خواص انجام نمیشه و سازنده بدون پارامتر هم نداره
بازم تاکید می کنم بهتره برای انواع اولیه (string,bool,int,...) بهتره از انتساب صریح (=) مثل کد دومتون استفاده کنید