c# - 使用一个属性为另一个属性创建总计
问题描述
我是 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);
}
}
}
解决方案
该属性就像一个函数一样工作。您可以声明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;
}
推荐阅读
- chronicle-queue - 如何消除“按位置线性扫描”警告?
- linux - 使用正则表达式使用 grep 删除点数
- r - r 不允许 x 轴显示标题(现在添加了数据)
- typescript - 将 KeysOfType 与泛型一起使用
- c++ - 包含std :: list的结构的c ++初始化
- html - HTML 表格项在表格外渲染
- sql - 使用 Oracle SQL,我怎样才能使用他们的排名(1-7)来获得工作日(周一至周日)?
- python - Pandas:图中的分组和 xticks
- c - 以毫米为单位计算距离的坐标
- knockout.js - 初始化 jQuery 文件上传后,如何将淘汰赛 js 绑定重新应用到文件输入元素?