اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

المشكلة الأولى (CS5001)  سببها أنه لا يتم العثور على طريقة Main الثابتة في البرنامج، وطريقة Main هي نقطة البداية الرئيسية لتنفيذ البرنامج، أي يجب أن تقوم بإضافة طريقة Main إلى الكود كالتالي:

public static void Main(string[] args)
{
    // الكود هنا
}

ولاحظ أنك قمت بكتابة Main بحرف m صغير وليس كبير.

أما بالنسبة للمشكلة الثانية (CS8600)، فتحدث عندما تحاول تحويل قيمة قد تكون قيمة فارغة (null) إلى نوع غير قابل للاشتقاق مما يعني أنه تم استخدام قيمة قد تكون فارغة (null) في مكان لا يقبل القيم الفارغة.

والصحيح هو استخدام Convert.ToInt32 لتحويل الإدخال المقروء من Console.ReadLine إلى قيمة صحيحة وتخزينها في المتغير age.

ففي السطر name = Console.ReadLine(), إذا قام المستخدم بترك الإدخال فارغًا، فإن Console.ReadLine() ستعيد قيمة فارغة (null)، إذا كانت name معرفة كنوع غير قابل للاشتقاق (non-nullable type)، فسيحدث خطأ CS8600، وتستطيع يمكنك استخدام نوع قابل للاشتقاق لـ name من خلال استخدام string? بدلاً من string.

وفي السطر age = Convert.ToInt32(Console.ReadLine()), إذا قام المستخدم بإدخال قيمة غير صحيحة أو ترك الإدخال فارغًا، فإن Console.ReadLine() قد تعيد قيمة فارغة (null).

وبما أن age هو من نوع int (نوع غير قابل للاشتقاق)، فسيحدث خطأ CS8600، لذا عليك استخدام int? بدلاً من int لتجنب خطأ CS8600 وللسماح بتخزين القيمة الفارغة (null) في حالة إدخال غير صحيح.

ولكن سيظهر لديك تنبيه آخر وهو CS8632: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

حيث أنه في لغة C# 8.0 وما بعدها، يمكن استخدام تعليقات Nullable Reference Types لتوضيح قابلية القيم الفارغة (nullability) للمراجعات، ويتم استخدامها لتوضيح ما إذا كانت المراجعات قد يتم تعيينها بقيمة فارغة (null) أم لا، ولكن، يجب تعيين السياق الخاص بتعليقات Nullable Reference Types باستخدام تعليمة '#nullable enable' في بداية الملف الذي يستخدم تلك التعليقات أي وضع السطر التالي:

#nullable enable

وبعد التعديلات السابقة يصبح الكود كالتالي:

#nullable enable

using System;

namespace pl
{
    class Program
    {
        static void Main(string[] args)
        {
            string? name;

            Console.WriteLine("enter your name");
            name = Console.ReadLine();

            Console.WriteLine("enter your age");
            string? ageInput = Console.ReadLine();

            int? age = !string.IsNullOrEmpty(ageInput) ? Convert.ToInt32(ageInput) : null;

            if (age > 20 && name != null)
            {
                Console.WriteLine($"welcome MR{name}");
            }
            else if (name != null)
            {
                Console.WriteLine($"welcome {name}");
            }
        }
    }
}
  • 0
نشر

حسب الكود الذي تم وضعه، هناك اثنين من الأخطاء:

الخطأ الأول: "Program does not contain a static "Main" method suitable for an entry point"

هذا الخطأ يحدث عندما يفتقد البرنامج الدالة الرئيسية (Main) التي تعتبر نقطة الدخول الرئيسية لتنفيذ البرنامج. يمكن إصلاح هذا الخطأ عن طريق إضافة دالة Main إلى البرنامج، والتأكد من أن تكون الكتابة بالحروف الكبيرة (Main).

الخطأ الثاني: "Converting null literal or possible null value to non-nullable type"

هذا الخطأ يحدث عندما يتم تحويل قيمة محتملة أن تكون فارغة (null) إلى نوع غير قابل للاحتواء على قيمة فارغة (nullable type). في الكود الذي وضعته، يتم استخدام دالة Console.ReadLine() للاستماع إلى إدخال المستخدم. إذا لم يقم المستخدم بإدخال أي شيء، فإن القيمة التي سيتم استردادها من الدالة هي قيمة فارغة (null).

لتجنب هذا الخطأ، يمكن استخدام عبارة التحقق من الصحة (null check) للتحقق من عدم وجود قيمة فارغة قبل تحويلها إلى نوع غير قابل للاحتواء على قيمة فارغة.

وفي الكود الصحيح، يمكن استخدام دالة Convert.ToInt32() لتحويل الإدخال إلى نوع int، والتي تقوم بإجراء التحقق من الصحة بشكل صحيح. المثال الصحيح للكود هو كما يلي:

using System;

namespace pl
{
    class Program
    {
        static void Main(string[] args)
        {
            int age;
            string name;
            Console.WriteLine("Enter your name:");
            name = Console.ReadLine();
            Console.WriteLine("Enter your age:");
            age = Convert.ToInt32(Console.ReadLine());
            if (age > 20)
            {
                Console.WriteLine($"Welcome MR {name}");
            }
            else
            {
                Console.WriteLine($"Welcome {name}");
            }
        }
    }
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...