【问题标题】:Error: class does not contain a definition and no extension method错误:类不包含定义且没有扩展方法
【发布时间】:2023-03-13 22:13:02
【问题描述】:

在我下面的代码中,它应该执行以下任务:

提示用户输入每个订单的值。不允许重复的订单号;当输入重复的订单号时,强制用户重新输入订单。当输入了五个有效订单后,将它们全部显示,加上所有订单的总和。

问题是其中有错误。我试图自己解决错误,但无法修复。我已经陷入这些错误好几个小时了。还有一件事,我真的不明白为什么它显示 OrderDemo 不包含 Total、OrderNumber、Customer 和 Quantity 的定义。给予的任何帮助将不胜感激。谢谢!

using System;

class OrderDemo
{

    public static void Main()
    {
        OrderDemo[] order = new OrderDemo[5];
        int x, y;
        double grandTotal = 0;
        bool goodNum;
        for (x = 0; x < order.Length; ++x)
        {
            order[x] = new Order(); //OrderDemo.Order does not contain a constructor that takes 0 arguments
            Console.Write("Enter order number");
            order[x].OrderNumber = Convert.ToInt32(Console.ReadLine());
            goodNum = true;
            for (y = 0; y < x; ++y)
            {
                if (order[x].Equals(order[y]))
                    goodNum = false;
            }
            while (!goodNum)
            {
                Console.Write("sorry, the order number " + order[x].OrderNumber + "is a duplicate. " + "\nPlease reenter: ");
                order[x].OrderNumber = Convert.ToInt32(Console.ReadLine());//OrderDemo does not contain a definition for OrderNumber and no extension..
                goodNum = true;
                for (y = 0; y > x; ++y)
                {
                    if (order[x].Equals(order[y]))
                        goodNum = false;
                }
            }
            Console.Write("Enter customer name");
            order[x].Customer = Console.ReadLine();//OrderDemo does not contain a definition for Customer and no extension..
            Console.Write("Enter Quantity");
            order[x].Quantity = Convert.ToInt32(Console.ReadLine());//OrderDemo does not contain a definition for Quantity and no extension..
        }

        Console.WriteLine("\nSummary\n");
        for (x = 0; x < order.Length; ++x)
        {
            Console.WriteLine(order[x].ToString());
            grandTotal += order[x].Total; //OrderDemo does not contain a definition for Total and no extension..
        }
        Console.WriteLine(" Total for all orders is" + grandTotal.ToString("c"));

    }

    public class Order
    {
        public int orderNum;
        public string cusName;
        public int quantity;
        public double total;
        public const double ItemPrice = 19.95;

        public Order(int ordNum, string cusName, int numOrdered)
        {
            OrderNum = ordNum;
            Customer = cusName;
            Quantity = numOrdered;
        }

        public int OrderNum
        {
            get { return orderNum; }
            set { orderNum = value; }
        }
        public string Customer
        {
            get { return cusName; }
            set { cusName = value; }
        }
        public int Quantity
        {
            get
            {
                return quantity;
            }
            set
            {
                quantity = value;
                total = quantity * ItemPrice;
            }
        }
        public double Total
        {
            get
            {
                return total;
            }
        }
        public override string ToString()
        {
            return ("Order " + OrderNum + " " + Customer + " " + Quantity +
                " @Php" + ItemPrice.ToString("0.00") + " each. " + "The total is Php" + Total.ToString("0.00"));
        }

        public override bool Equals(Object e)
        {
            bool equal;
            Order temp = (Order)e;
            if (OrderNum == temp.OrderNum)
                equal = true;
            else
                equal = false;
            return equal;
        }
        public override int GetHashCode()
        {
            return OrderNum;
        }
    }
} 

【问题讨论】:

  • order[x] = new Order(); 不起作用,因为 orderOrderDemo[] 而不是 Order[]。如果您自己提供了参数,您还需要在Order 中使用无参数构造函数。否则无法使用。

标签: c# methods constructor extension-methods


【解决方案1】:

您声明您的数组包含OrderDemo 对象。
正如错误明确指出的那样,OrderDemo 没有任何属性。

您可能是指Order,这是一个不同的类。

【讨论】:

    【解决方案2】:

    C# 为您提供了一个默认构造函数,只要您不定义其他接受参数的构造函数。因为你有这个:

    public Order(int ordNum, string cusName, int numOrdered)
    {
        OrderNum = ordNum;
        Customer = cusName;
        Quantity = numOrdered;
    }
    

    不生成默认构造函数。你需要添加这个:

    public Order() { }
    

    ...如果您想创建对象而不向其传递参数。

    另外,正如 SLaks 所指出的,您错误地声明了您的数组:

    OrderDemo[] order = new OrderDemo[5];
    

    应该改为:

    var order = new Order[5]; // or Order[] order = new Order[5];
    

    【讨论】:

    • 非常感谢您的帮助!我的程序现在运行良好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    相关资源
    最近更新 更多