البرمجة

حل مشكلة CS0266: تحويل غير ضمني من نوع ‘double’ إلى ‘int’ في C#

في هذا السياق، يظهر لي أن المشكلة تكمن في الاختلاف بين نوع البيانات الذي يحاول الكود إرجاعه وبين نوع البيانات الذي يحتاجه الكود الذي يقوم بالاستدعاء. يبدو أن الطريقة GetDisplacement تقوم بإرجاع قيمة من نوع double، ولكن الكود الذي يقوم بالاستدعاء يتوقع قيمة من نوع int.

إليك توضيح مفصل للمشكلة:

في الكود الذي يقوم بالاستدعاء:

csharp
double displacement = sqLite.GetDisplacement(transItem.Item.Name);

يتوقع البرنامج أن يكون displacement من نوع double.

ولكن في الكود الذي يتم استدعاءه:

csharp
public int GetDisplacement(string item) { // ... return dDisposition; // هنا يتم إرجاع قيمة من نوع double }

يتم إرجاع قيمة dDisposition من نوع double.

حينها، يحدث الاختلاف في أن الكود الذي يستدعي GetDisplacement يتوقع int بينما تقوم الدالة بإرجاع double.

لحل هذه المشكلة، يجب عليك تغيير نوع البيانات الذي يتوقعه الكود الذي يستدعي GetDisplacement إلى double بدلاً من int. يمكنك تحديث تعريف المتغير displacement في الكود الذي يقوم بالاستدعاء إلى:

csharp
double displacement = sqLite.GetDisplacement(transItem.Item.Name);

وبذلك يتناسب نوع البيانات المتوقع مع القيمة المُرجَعة من الدالة GetDisplacement وتتجنب الخطأ الذي تواجهه.

المزيد من المعلومات

لحل المشكلة المتعلقة بتحويل النوع من double إلى int في الكود الذي تم توفيره، يجب أن نفهم الطبيعة الأساسية للمشكلة. يبدو أن القيمة التي يتم استرجاعها من قاعدة البيانات تكون من نوع double، ولكن الدالة GetDisplacement تقوم بإرجاع هذه القيمة كنوع int.

للتصحيح، يمكن تغيير تعريف الدالة GetDisplacement لتكون من نوع double بدلاً من int. فيما يلي التعديل المقترح:

csharp
public double GetDisplacement(string item) { double dDisposition = 0; string sSql = "SELECT [Displacement] FROM [Items] WHERE [Name] = '" + item + "';"; using (var dbConnection = new SQLiteConnection(sConnectionString)) { try { dbConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(sSql, dbConnection); object result = cmd.ExecuteScalar(); dDisposition = Convert.ToDouble(result); } catch (Exception e) { MessageBox.Show("Error retrieving displacement information: " + e.ToString()); } } return dDisposition; }

وفي الكود الذي يقوم بالاستدعاء:

csharp
double displacement = sqLite.GetDisplacement(transItem.Item.Name);

بهذا التعديل، تضمن أن الدالة GetDisplacement تقوم بإرجاع قيمة من نوع double وليس int. يجب أن يتناسب نوع القيمة المرجعة مع نوع المتغير الذي يستقبل القيمة، وهذا يحل المشكلة الظاهرة في الشيفرة البرمجية.

زر الذهاب إلى الأعلى