错误:类不包含定义,也没有扩展方法

时间:2014-01-08 16:21:38

标签: c# methods constructor extension-methods

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

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

问题是它有错误。我试图自己解决错误,但我无法修复它。我已经被困在这些错误中好几个小时了。另外,我无法理解为什么它显示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;
        }
    }
} 

2 个答案:

答案 0 :(得分:1)

您将数组声明为包含OrderDemo个对象 由于错误明确指出,OrderDemo没有任何属性。

你可能意味着Order,这是一个不同的类。

答案 1 :(得分:0)

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];