首页 > 解决方案 > 使用一个属性为另一个属性创建总计

问题描述

我是 C# 语言的新手,我试图弄清楚如何让我的Quantity财产通过将购买的物品数量相乘,然后在设置订购数量时的 12.35 物品价格来计算最终价格。

我也有使用该Equals()方法的问题。我正在尝试使用该Equals()方法根据订单号比较 2 个订单,但我在 Visual Studio 中收到警告说'Order' overrides Object.Equals(object o) but does not override Object.GetHashCode()。我该如何解决?

这是我的程序:

using System;

namespace Order 
{
    class Program
    {
        static void Main(string[] args)
        {
            // creating the orders
            Order order1 = new Order(1, "Joe Bob", 2);
            Order order2 = new Order(3, "Sally Bob", 4);
            Order order3 = new Order(1, "Jimmy Bob", 5);
            Console.WriteLine(order1.ToString() + "\n");
            Console.WriteLine(order2.ToString() + "\n");
            Console.WriteLine(order3.ToString() + "\n");

            //checks for duplicates
            CheckDuplicate(order1, order2);
            CheckDuplicate(order2, order3);
            CheckDuplicate(order1, order3);
        }
        // output for duplicates
        public static void CheckDuplicate(Order firstOrder, Order secondOrder)
        {
            if (firstOrder.Equals(secondOrder))
            {
                Console.WriteLine("The two orders are the same!");
            }
            else
            {
                Console.WriteLine("The two orders are not the same!");
            }
        }
    }

    class Order
    {
        // setting properties
        public int OrderNum { get; set; }
        public string CustomerName { get; set; }
        public double Quantity;
        private readonly double Total;
        // total price
        public double GetTotal()
        {
            double itemPrice = 12.35;
            double Total = Quantity * itemPrice;
            return Total;
        }
        // equals to method
        public override bool Equals(Object o)
        {
            bool isEqual = true;
            if (this.GetType() != o.GetType())
                isEqual = false;
            else
            {
                Order temp = (Order)o;
                if (OrderNum == temp.OrderNum)
                    isEqual = true;
                else
                    isEqual = false;
            }
            return isEqual;
        }
        // default constructor
        public Order(int OrderNum, string CustomerName, double Quantity)
        {
            this.OrderNum = OrderNum;
            this.CustomerName = CustomerName;
            this.Quantity = Quantity;
        }
        // returns final output
        public override string ToString()
        {
            return ("Order Number       : " + OrderNum) + "\n" + ("Customer name      : " + CustomerName) + "\n" + ("Quantity Ordered   : " + Quantity) + "\n" + ("Totatl Price       : " + Total);
        }
    }
}

标签: c#methodsproperties

解决方案


该属性就像一个函数一样工作。您可以声明Total为只读属性,并声明一个执行乘法运算的 getter。

public double Quantity;
public double Total {
    get {
        const double itemPrice = 12.35;
        return Quantity * itemPrice;
    }
}

覆盖 Object.GetHashCode() 很容易。如果两个项目相同,您应该创建一个返回相同值的函数。因为您使用 OrderNum 作为识别订单的唯一方法。只需返回它就可以完成这项工作。

public override int GetHashCode() {
    return this.OrderNum;
}

推荐阅读