我需要的建议是位于代码底部附近的“Equals”方法。要注意,Equals方法必须包含在Order类中,并且我不能使用自动实现的属性,以防你想知道为什么我没有使用它们lol。 equals方法的功能是搜索所有当前订单号(目前有1个用户和3个自动)用于复制。我无法弄清楚如果没有用户输入或没有使用一堆“if”语句我怎么能做到这一点。任何建议都很棒,谢谢。 ~~底部的其他两种方法都没有完成~~
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Assignment3
{
class Program
{
static void Main(string[] args)
{
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!
// USER CONTROLLED
int ordNum;
Console.Write("Enter Order Number: ");
ordNum = Convert.ToInt16(Console.ReadLine());
string custName;
Console.Write("Enter Customer Name: ");
custName = Console.ReadLine();
int quantity;
Console.Write("Enter Quantity: ");
quantity = Convert.ToInt32(Console.ReadLine());
Order firstOrder = new Order(ordNum, custName, quantity);
Console.WriteLine("Customer: {0}\nOrder Number: {1}\nQuantity" +
"Ordered: {2}\nTotal Price: {3}", firstOrder.Customer, firstOrder.OrderNum, firstOrder.QuantityOrd, firstOrder.Total);
// USER CONTROLLED
// AUTOMATED
// FIRST
int firstOrdNum = 678123;
string firstName ="P Jenkins";
int firstQuantity = 35;
Order firstAutomated = new Order(firstOrdNum, firstName, firstQuantity); // first Instance of Order
// END OF FIRST
// SECOND
int secondOrdNum = 678123;
string secondName = "L Jenkins";
int secondQuantity = 35;
Order secondAutomated = new Order(secondOrdNum, secondName, secondQuantity);
// END OF SECOND
// THIRD
int thirdOrdNum = 49284;
string thirdName = "McDonalds";
int thirdQuantity = 78;
Order thirdAutomated = new Order(thirdOrdNum, thirdName, thirdQuantity);
// END OF THIRD
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
}
class Order
{
private int orderNum;
private string customer;
private int quantityOrd;
public const double amt = 19.95;
private double totalPrice;
// PROPERTIES TO ACCES PRIVATE DATA
public int OrderNum // CHECK
{
get
{
return orderNum;
}
set
{
orderNum = value;
}
}
public string Customer // CHECK
{
get
{
return customer;
}
set
{
customer = value;
}
}
public int QuantityOrd // CHECK
{
get
{
return quantityOrd;
}
set
{
quantityOrd = value;
CalcTotalPrice();
}
}
public double Total // CHECK
{
get
{
return totalPrice;
}
}
// CALCULATE TOTAL
private void CalcTotalPrice()
{
totalPrice = QuantityOrd * amt;
}
// EQUALS METHOD
public void Equals(int ordNum1, int ordNum2)
{
Console.WriteLine("The two orders by P Jenkens (Order Number: {0}) and L Jenkens (Order Number: {1})" +
"are the same order!", ordNum1, ordNum2);
}
public void GetHashCode(string customer, double hashCode)
{
Console.WriteLine("The Hash Code of Customer {0} is {1}", customer, hashCode);
}
public void ToString()
{
}
// CONSTRUCTOR TO ACCEPT VALUES
public Order(int ordNum, string cust, int qntOrd)
{
OrderNum = ordNum;
Customer = cust;
QuantityOrd = qntOrd;
}
}
答案 0 :(得分:0)
听起来每个Order
都应该有唯一的标识符。
检查两个订单是否是相同的订单,将比较他们的Id。
检查两个订单是否具有相同的内部状态,就像正常的等于。
如果您想使用其ID来访问订单,则应将其保存在字典中。
一般的想法是这样的,虽然这里缺少很多:
public class Order
{
...
private static Dictionary<int, Order> _orders = new Dictionary<int, Order>();
public static Order Get(int id)
{
return this._order[id];
}
private static object _idLocker = new object();
private static int _nextId = 0;
public readonly int Id;
public Order()
{
// Just to make sure that the identifiers are unique,
// even if you have threads messing around.
lock (_idLocker)
{
this.Id = _nextId;
_nextId++;
}
_orders.Add(this.Id, this);
}
public Order(int id)
{
this.Id = id;
_orders.Add(this.Id, this);
}
public static bool Equals(int id1, int id2)
{
return _orders[id1].Equals(_orders[id2]);
}
public bool Equals(Order otherOrder)
{
// Check whether you have the same inner state as the other order
}
}