الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال حول المتغيرات

مغلق
بدأه زيد الرافدين في 27 يناير 2007 · 5 رد · 632 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انِشأت متغير واسميته mystr وهو من نوع String

واردت ان انِشأ جملة شرطية بسيطة وهي

string mystr;
if (mystr == "Zaid")
{
mystr = "Arabteam";
}

لكن المشكلة اثناء تنفيذ البرنامج يظهر خطأ وهنالك خط ازرق تحت المتغير (mystr) في جملة الشرط

ورسالة الخطأ هي

Use of unassigned local variable 'mystr'

فما هو حل هذه المشكلة

وعندي سؤال اخر وهو

في فيجوال بسيك.نيت كنا نستعمل Imports و #C نستعمل using

لكن المشكلة عند استعمال using فانها لاتؤدي اي مفعول وكانها لم تكتب اصلا

شكرا

#2

وعليكم السلام ورحمة الله وبركاته.

بالنسبة للاستفسار الأول, فالخطأ يظهر لأنه الـ mystr لم يتم اسناد أية قيمة له, وبالتالي لا يمكن اختبار القيمة لأنه لايوجد له قيمة أصلا. حل المشكلة باسناد أي قيمة ولو كانت "", مثلا :

string mystr = "";
if (mystr == "Zaid")
{
mystr = "Arabteam";
}

بالنسبة لـ using فاخبرنا عما تريد فعله وعن الخطأ ؟ وأظن أنك لم تضف Reference أولا للـ DLL قبل أن تكتب using لـ Namespace موجود بها.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#3

مشكور اخ معتز على الرد

اولا هل يجب دائما اسناد قيمة الى المتغير قبل ادخالها في جملة شرط في #C ؟

ثانيا مثلا

using System.Data.SqlClient;

بعد كتابة الكوداعلاه لاحاجة ان نكتب في كل مرة system.data.sqlclient

المفروض system.sqlclient فقط

لكنها لاتظهر .. اي في كل مرة System.Data.SqlClient

فلماذا هذه المشكلة

اتمنى ان اكون قد عبرت بصورة جيدة عن المشكلة

وشكرا جزيلا

تم تعديل هذه المشاركة بواسطة زيد الرافدين في 28 يناير 2007 في 00:03

#4
اقتباس
اولا هل يجب دائما اسناد قيمة الى المتغير قبل ادخالها في جملة شرط في #C ؟

لا ولكن يجب دائما عند البرمجة على الدوت نت ان تعطي قيم ابتدائية للمتغيرات المحلية كما اجاب الاخ معتز

اقتباس
فالخطأ يظهر لأنه الـ mystr لم يتم اسناد أية قيمة له, وبالتالي لا يمكن اختبار القيمة لأنه لايوجد له قيمة أصلا. حل المشكلة باسناد أي قيمة ولو كانت ""
اقتباس
بعد كتابة الكوداعلاه لاحاجة ان نكتب في كل مرة system.data.sqlclient

المفروض system.sqlclient فقط

لكنها لاتظهر .. اي في كل مرة System.Data.SqlClient

فلماذا هذه المشكلة

لم افهم ما هو الذي لا يظهر؟

بمجرد كتابتك لهذا ال namespace فأن كل الكلاسات والبروبرتيز وغيرها والموجودة تحت هذا الnamespace ستكون متاحة لك

كما انه لا يوجد namespace بهذا المسار System.SqlClient

"خيركم من تعلم العلم وعلمه". ..........استغفر الله. ........ اللهم صلي وسلم على سيدنا محمد

احمد عبد الحميد ابوغرارة

CodeGuru CodeProject CGTalk

#5
اقتباس
هل يجب دائما اسناد قيمة الى المتغير
نعم بالنسبة للمتغيرات المحلية كما أشار الأخ أحمد, أما ان كان المتغير كـ Member أو Field داخل الكلاس فلا يشترط هذا. مثلا :

public class SomeClass
{
public string mystr;
public int myint;
public bool mybool;

public void SomeMethod()
{

if (mystr == "Zaid")
{
mystr = "Arabteam";
}

}

}

لاحظ أن myst ليس محلي داخل الـ Method وانما هو Member في الكلاس. وعندما يتم انشاء هذا الكلاس باستخدام كلمة new فان الـ mystr سيصبح تلقائيا بـ "" و myint سيصبح بصفر و mybool سيصبح بـ false فلا داعي هنا لاسناد أي قيم لهم يدويا لأن الـ Constructor يفعل هذا :

SomeClass some;

some = new SomeClass();
//mystr now = ""
//myint now = 0
//mybool now = false


some.SomeMethod();
//mystr now = ""


some.mystr = "Zaid";
some.SomeMethod();
//mystr now = "ArabTeam"

ملحوظة : الكلاس الذي كتبته ليس به Constructor ولكن السي شارب تضيف واحد تلقائيا حتى تستطيع أن تنشئ الكلاس وليقوم هو باسناد القيم الابتدائية للأعضاء الموجودة وربما له وظائف أخرى.. لا أذكر !

على الجانب الآخر ان كان المتغير محلي فلا يوجد من يعطيه القيم إلا أنت, ولهذا يظهر Error عندما تستخدم متغير لم تسند أنت ولا أي شيء آخر أي قيمة له. مثلا كالتالي :

public void SomeMethod()
{
int myint;
//سيظهر مشكلة ان استخدمه وهو هكذا بدون قيمة

myint = 0;
يمكنك استخدامه الآن لأن له قيمة
}

بالنسبة لكود using الذي كتبته فهو صحيح, مثلا يوجد كلاس اسمه SqlConnection موجود داخل الـ System.Data.SqlClient ولهذا ان قمت بعمل using لهذا الـ namespace فيمكنك أن تنشئ objects من الـ SqlConnection هذا وغيره بدون كتابة الأسماء بالكامل :

using System.Data.SqlClient;
..
.
يمكنك الآن كتابة التالي
SqlConnection myConn = .....
وذلك بدلا من كتابة
System.Data.SqlClient.SqlConnection myConn = .....

لا أدري أين المشكلة ؟

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#6

مشكور اخ ahmed_3d و اخ معتز شمس

ما شاء الله شرح رائع وباسلوب محترف

مشكور جدا يااخوان والله ماقصرتم

شكرا جزيلا

هذا الموضوع مغلق.

مواضيع مشابهة