【问题标题】:My order total is "never assigned to", and will always have its value set to 0. How do I fix this? [duplicate]我的订单总额是“从未分配给”,并且总是将其值设置为 0。我该如何解决这个问题? [复制]
【发布时间】:2020-04-07 00:11:13
【问题描述】:

我的代码块有几个问题。一切正常,但我的总数始终为 0。屏幕底部的警告说明如下:“'Order.Total' 从未分配给,并且始终具有其默认值 0”。

如何修复此警告标志?

我还收到一条警告,说我的 EqualsTo() 语句正在被覆盖,但 Object.GetHashCode() 没有被覆盖。如何修复这 2 个小错误?

如果您想将其放入您的 IDE 并尝试自行调试,我将提供整个代码...我还将粘贴一部分我认为会导致最终问题的代码始终默认为 0。

整个代码

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
        double itemPrice = 12.35;
        public int OrderNum { get; set; }
        public string CustomerName { get; set; }
        public double Quantity;
        private readonly double Total;

        // total price
        public double GetTotal()
        {
            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);
        }
    }
}

WARNING 的部分代码

class Order
    {
        // setting properties
        double itemPrice = 12.35;
        public int OrderNum { get; set; }
        public string CustomerName { get; set; }
        public double Quantity;
        private readonly double Total;

        // total price
        public double GetTotal()
        {
            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);
        }
    }

【问题讨论】:

  • private readonly double Total; 从未被赋值。
  • 使总只读属性public double Total => Quantity * itemPrice
  • 不要覆盖 Equals for Order,但有一个方法 public bool IsSameAs(Order order) => OrderNum == order.OrderNum;

标签: c#


【解决方案1】:

正如 cmets 所示,没有调用 GetTotal() 将值分配给 Total。

如果你不想调用GetTotal,你可以把那个公式放在构造函数中,然后分配Total值。

【讨论】:

  • 那和GetTotal() 没有为字段Total 赋值。
  • 哈 - 好收获。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 2021-04-30
  • 2019-05-21
  • 2015-01-25
  • 1970-01-01
  • 2015-07-09
相关资源
最近更新 更多